diff --git a/Announcers/instructions.txt b/Announcers/instructions.txt index b6fa83b934..eb1029fc97 100644 --- a/Announcers/instructions.txt +++ b/Announcers/instructions.txt @@ -1 +1 @@ -Place announcer folders in this directory. +Place announcer folders in this directory. \ No newline at end of file diff --git a/BGAnimations/instructions.txt b/BGAnimations/instructions.txt index baf640d65f..97f75f9d9c 100644 --- a/BGAnimations/instructions.txt +++ b/BGAnimations/instructions.txt @@ -1 +1 @@ -Place BGAnimation folders in here. +Place BGAnimation folders in here. diff --git a/BGAnimations/white flash/default.lua b/BGAnimations/white flash/default.lua index f2f53c5644..ebb4716792 100644 --- a/BGAnimations/white flash/default.lua +++ b/BGAnimations/white flash/default.lua @@ -1,5 +1,4 @@ -return Def.Quad -{ +return Def.Quad{ OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomtowidth,SCREEN_WIDTH;zoomtoheight,SCREEN_HEIGHT); GainFocusCommand=cmd(diffusealpha,1.0;accelerate,0.6;diffusealpha,0); } diff --git a/BGAnimations/yellow flash/default.lua b/BGAnimations/yellow flash/default.lua index c16651e11c..f2bef2c624 100644 --- a/BGAnimations/yellow flash/default.lua +++ b/BGAnimations/yellow flash/default.lua @@ -1,5 +1,4 @@ -return Def.Quad -{ +return Def.Quad{ OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomtowidth,SCREEN_WIDTH;zoomtoheight,SCREEN_HEIGHT); GainFocusCommand=cmd(diffuse,color("#FFFFA0");accelerate,0.6;diffusealpha,0); } diff --git a/BackgroundEffects/Centered.lua b/BackgroundEffects/Centered.lua index f4292160ff..b0c85341c8 100644 --- a/BackgroundEffects/Centered.lua +++ b/BackgroundEffects/Centered.lua @@ -1,10 +1,10 @@ -local Color = color(Var "Color1"); -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;diffuse,Color;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; +local Color = color(Var "Color1"); +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;diffuse,Color;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/Checkerboard1File2x2.lua b/BackgroundEffects/Checkerboard1File2x2.lua index 2e4327b56d..50cdfee47a 100644 --- a/BackgroundEffects/Checkerboard1File2x2.lua +++ b/BackgroundEffects/Checkerboard1File2x2.lua @@ -1,16 +1,16 @@ -local Color = color(Var "Color1"); - -local a = LoadActor(Var "File1") .. { - OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); -}; - -local t = Def.ActorFrame { - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; -}; - -return t; +local Color = color(Var "Color1"); + +local a = LoadActor(Var "File1") .. { + OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); +}; + +local t = Def.ActorFrame { + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; +}; + +return t; diff --git a/BackgroundEffects/Checkerboard2File2x2.lua b/BackgroundEffects/Checkerboard2File2x2.lua index 36c87f5e65..9a2f881395 100644 --- a/BackgroundEffects/Checkerboard2File2x2.lua +++ b/BackgroundEffects/Checkerboard2File2x2.lua @@ -1,16 +1,16 @@ -local Color = color(Var "Color1"); -local a = LoadActor(Var "File2") .. { - OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); -}; - -local t = Def.ActorFrame { - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; -}; - -return t; - +local Color = color(Var "Color1"); +local a = LoadActor(Var "File2") .. { + OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); +}; + +local t = Def.ActorFrame { + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; +}; + +return t; + diff --git a/BackgroundEffects/Kaleidoscope2x2.lua b/BackgroundEffects/Kaleidoscope2x2.lua index e1410ac6cc..b6d282ff3e 100644 --- a/BackgroundEffects/Kaleidoscope2x2.lua +++ b/BackgroundEffects/Kaleidoscope2x2.lua @@ -1,16 +1,16 @@ -local Color = color(Var "Color1"); - -local a = LoadActor(Var "File1") .. { - OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;zoomx,self:GetZoomX()*-1;zoomy,self:GetZoomY()*-1;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); -}; - -local t = Def.ActorFrame { - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; - a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; -}; - -return t; +local Color = color(Var "Color1"); + +local a = LoadActor(Var "File1") .. { + OnCommand=cmd(zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color;zoomx,self:GetZoomX()*-1;zoomy,self:GetZoomY()*-1;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); +}; + +local t = Def.ActorFrame { + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; + a .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM)); }; +}; + +return t; diff --git a/BackgroundEffects/SongBgWithMovieViz.lua b/BackgroundEffects/SongBgWithMovieViz.lua new file mode 100644 index 0000000000..6cea5b694f --- /dev/null +++ b/BackgroundEffects/SongBgWithMovieViz.lua @@ -0,0 +1,16 @@ +local Color1 = color(Var "Color1"); +local Color2 = color(Var "Color2"); + +local t = Def.ActorFrame { + Def.Sprite { + OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomtowidth,SCREEN_WIDTH;zoomtoheight,SCREEN_HEIGHT;diffuse,Color1;effectclock,"music"); + }; + + LoadActor(Var "File1") .. { + OnCommand=cmd(blend,"BlendMode_Add";x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomtowidth,SCREEN_WIDTH;zoomtoheight,SCREEN_HEIGHT;diffuse,Color2;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/StretchNoLoop.lua b/BackgroundEffects/StretchNoLoop.lua index 7c063cda1f..30a5cf9112 100644 --- a/BackgroundEffects/StretchNoLoop.lua +++ b/BackgroundEffects/StretchNoLoop.lua @@ -1,10 +1,10 @@ -local Color = color(Var "Color1"); -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(scale_or_crop_background;diffuse,Color;loop,false;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; +local Color = color(Var "Color1"); +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(scale_or_crop_background;diffuse,Color;loop,false;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/StretchNormal.lua b/BackgroundEffects/StretchNormal.lua index a58834ec72..f97767eaa3 100644 --- a/BackgroundEffects/StretchNormal.lua +++ b/BackgroundEffects/StretchNormal.lua @@ -1,11 +1,11 @@ -local Color = color(Var "Color1"); - -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(scale_or_crop_background;diffuse,Color;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; +local Color = color(Var "Color1"); + +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(scale_or_crop_background;diffuse,Color;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/StretchNormalAlignLeft.lua b/BackgroundEffects/StretchNormalAlignLeft.lua index 2d7b6a2704..81946b540a 100644 --- a/BackgroundEffects/StretchNormalAlignLeft.lua +++ b/BackgroundEffects/StretchNormalAlignLeft.lua @@ -1,12 +1,12 @@ --- Align left when cropping to 4:3. -local Color = color(Var "Color1"); - -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(horizalign,left;scaletocover,0,0,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,color(Color);effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; +-- Align left when cropping to 4:3. +local Color = color(Var "Color1"); + +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(horizalign,left;scaletocover,0,0,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,color(Color);effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/StretchPaused.lua b/BackgroundEffects/StretchPaused.lua index b741b21574..3ad028f558 100644 --- a/BackgroundEffects/StretchPaused.lua +++ b/BackgroundEffects/StretchPaused.lua @@ -1,11 +1,11 @@ -local Color = color(Var "Color1"); - -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(scale_or_crop_background;diffuse,Color;pause;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; +local Color = color(Var "Color1"); + +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(scale_or_crop_background;diffuse,Color;pause;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; diff --git a/BackgroundEffects/StretchRewind.lua b/BackgroundEffects/StretchRewind.lua index b0dc6cc09b..c6e6d192db 100644 --- a/BackgroundEffects/StretchRewind.lua +++ b/BackgroundEffects/StretchRewind.lua @@ -1,12 +1,12 @@ -local Color = color(Var "Color1"); - -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(scale_or_crop_background;diffuse,Color;position,0;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; - +local Color = color(Var "Color1"); + +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(scale_or_crop_background;diffuse,Color;position,0;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; + diff --git a/BackgroundEffects/UpperLeft.lua b/BackgroundEffects/UpperLeft.lua index 01f0d33979..ee323bc219 100644 --- a/BackgroundEffects/UpperLeft.lua +++ b/BackgroundEffects/UpperLeft.lua @@ -1,13 +1,13 @@ --- upper left corner -local Color = color(Var "Color1"); - -local t = Def.ActorFrame { - LoadActor(Var "File1") .. { - OnCommand=cmd(diffuse,Color;effectclock,"music"); - GainFocusCommand=cmd(play); - LoseFocusCommand=cmd(pause); - }; -}; - -return t; - +-- upper left corner +local Color = color(Var "Color1"); + +local t = Def.ActorFrame { + LoadActor(Var "File1") .. { + OnCommand=cmd(diffuse,Color;effectclock,"music"); + GainFocusCommand=cmd(play); + LoseFocusCommand=cmd(pause); + }; +}; + +return t; + diff --git a/BackgroundTransitions/CrossFade.xml b/BackgroundTransitions/CrossFade.xml index 9816a0e129..734ecbdd9a 100644 --- a/BackgroundTransitions/CrossFade.xml +++ b/BackgroundTransitions/CrossFade.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/FadeDown.xml b/BackgroundTransitions/FadeDown.xml index dfeecd1852..94e77631bd 100644 --- a/BackgroundTransitions/FadeDown.xml +++ b/BackgroundTransitions/FadeDown.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/FadeLeft.xml b/BackgroundTransitions/FadeLeft.xml index 9b5e1ceadd..0389c72e70 100644 --- a/BackgroundTransitions/FadeLeft.xml +++ b/BackgroundTransitions/FadeLeft.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/FadeRight.xml b/BackgroundTransitions/FadeRight.xml index e586ad6feb..a1f20f497c 100644 --- a/BackgroundTransitions/FadeRight.xml +++ b/BackgroundTransitions/FadeRight.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/FadeUp.xml b/BackgroundTransitions/FadeUp.xml index 166635a6af..144d8c4181 100644 --- a/BackgroundTransitions/FadeUp.xml +++ b/BackgroundTransitions/FadeUp.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/SlideDown.xml b/BackgroundTransitions/SlideDown.xml index bce4299052..399b35962f 100644 --- a/BackgroundTransitions/SlideDown.xml +++ b/BackgroundTransitions/SlideDown.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/SlideLeft.xml b/BackgroundTransitions/SlideLeft.xml index 913dc83351..cd0bedabd4 100644 --- a/BackgroundTransitions/SlideLeft.xml +++ b/BackgroundTransitions/SlideLeft.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/SlideRight.xml b/BackgroundTransitions/SlideRight.xml index 4965150109..1d7f6f21ee 100644 --- a/BackgroundTransitions/SlideRight.xml +++ b/BackgroundTransitions/SlideRight.xml @@ -1,4 +1,4 @@ - + diff --git a/BackgroundTransitions/SlideUp.xml b/BackgroundTransitions/SlideUp.xml index 9311b5c8b3..447489f6c9 100644 --- a/BackgroundTransitions/SlideUp.xml +++ b/BackgroundTransitions/SlideUp.xml @@ -1,4 +1,4 @@ - + diff --git a/CDTitles/Instructions.txt b/CDTitles/Instructions.txt index 14fabc417b..1477129755 100644 --- a/CDTitles/Instructions.txt +++ b/CDTitles/Instructions.txt @@ -1,5 +1,5 @@ -DWI-style CDTiltes can be placed here. - -However, you are highly encouraged to place the CDTitle graphics -inside the song folder since the package manager cannot use the -DWI-style CDTitles or Music folders. +DWI-style CDTitles can be placed here. + +However, you are highly encouraged to place the CDTitle graphics +inside the song folder since the package manager cannot use the +DWI-style CDTitles or Music folders. \ No newline at end of file diff --git a/Characters/Instructions.txt b/Characters/Instructions.txt index e69de29bb2..5b974250e2 100644 --- a/Characters/Instructions.txt +++ b/Characters/Instructions.txt @@ -0,0 +1,21 @@ +IF YOU DO NOT HAVE THE BONE FILES, 3D DANCING CHARACTERS WILL NOT WORK. +THE BONE FILES ARE NOT DISTRIBUTED WITH ANY VERSION OF STEPMANIA/sm-ssc SINCE +THEY CONTAIN COPYRIGHTED MATERIAL NOT MADE BY US. IF WE COME UP WITH DATA LATER, +COOL. IF NOT, SO BE IT. + +http://stepmaniathings.com/downloads/characters/-required-bones-and-helper-files.html +EXTRACT THE FILES IN THIS FOLDER SO THAT YOU SEE tons of _DDRPC_*.bones.txt files. + +THEN 3D CHARACTERS WILL WORK. +JUST DON'T SPAM THE FORUMS AND BUGTRACKER ABOUT IT. +THE INSTRUCTIONS COME WITH THE PROGRAM. YOU'RE READING THEM RIGHT NOW!!! + +oh and for compatibility, you will want to perform the following renames: + +old name | new name +------------------+-------------- + DancePad-DDR.txt | DancePad.txt +DancePads-DDR.txt | DancePads.txt + +a bit presumptious, but anything in the name of keeping it safe in regards to +copyright, yeah? \ No newline at end of file diff --git a/Characters/default/character.ini b/Characters/default/character.ini index 330532715e..82a87050bc 100644 --- a/Characters/default/character.ini +++ b/Characters/default/character.ini @@ -1,10 +1,10 @@ -[Character] -Level1Attack1=1.5x -Level1Attack2=hidden -Level1Attack3=reverse -Level2Attack1=2x -Level2Attack2=sudden -Level2Attack3=expand -Level3Attack1=3x -Level3Attack2=boost -Level3Attack3=brake +[Character] +Level1Attack1=1.5x +Level1Attack2=hidden +Level1Attack3=reverse +Level2Attack1=dizzy +Level2Attack2=sudden +Level2Attack3=expand +Level3Attack1=0.5x +Level3Attack2=drunk +Level3Attack3=brake \ No newline at end of file diff --git a/Characters/shader.png b/Characters/shader.png new file mode 100644 index 0000000000..0ca6fe53b7 Binary files /dev/null and b/Characters/shader.png differ diff --git a/Courses/Samples/PlayersBest1-4.crs b/Courses/Default/MostPlayed_01-04.crs similarity index 71% rename from Courses/Samples/PlayersBest1-4.crs rename to Courses/Default/MostPlayed_01-04.crs index bcbc88602a..a3cbe6dd71 100644 --- a/Courses/Samples/PlayersBest1-4.crs +++ b/Courses/Default/MostPlayed_01-04.crs @@ -1,6 +1,5 @@ -#COURSE:Players Best 1-4; -#SONG:BEST1:Medium; -#SONG:BEST2:Medium; -#SONG:BEST3:Medium; -#SONG:BEST4:Medium; - +#COURSE:Most Played 01-04; +#SONG:BEST1:Medium; +#SONG:BEST2:Medium; +#SONG:BEST3:Medium; +#SONG:BEST4:Medium; diff --git a/Courses/Default/MostPlayed_01-04.png b/Courses/Default/MostPlayed_01-04.png new file mode 100644 index 0000000000..100fe45005 Binary files /dev/null and b/Courses/Default/MostPlayed_01-04.png differ diff --git a/Courses/Samples/PlayersBest5-8.crs b/Courses/Default/MostPlayed_05-08.crs similarity index 71% rename from Courses/Samples/PlayersBest5-8.crs rename to Courses/Default/MostPlayed_05-08.crs index e889f818d1..31463ab431 100644 --- a/Courses/Samples/PlayersBest5-8.crs +++ b/Courses/Default/MostPlayed_05-08.crs @@ -1,5 +1,5 @@ -#COURSE:Players Best 5-8; -#SONG:BEST5:Medium; -#SONG:BEST6:Medium; -#SONG:BEST7:Medium; -#SONG:BEST8:Medium; +#COURSE:Most Played 05-08; +#SONG:BEST5:Medium; +#SONG:BEST6:Medium; +#SONG:BEST7:Medium; +#SONG:BEST8:Medium; diff --git a/Courses/Default/MostPlayed_05-08.png b/Courses/Default/MostPlayed_05-08.png new file mode 100644 index 0000000000..dbcf874ffa Binary files /dev/null and b/Courses/Default/MostPlayed_05-08.png differ diff --git a/Courses/Samples/PlayersBest9-12.crs b/Courses/Default/MostPlayed_09-12.crs similarity index 72% rename from Courses/Samples/PlayersBest9-12.crs rename to Courses/Default/MostPlayed_09-12.crs index 9cad62b0b2..80a5b78449 100644 --- a/Courses/Samples/PlayersBest9-12.crs +++ b/Courses/Default/MostPlayed_09-12.crs @@ -1,5 +1,5 @@ -#COURSE:Players Best 9-12; -#SONG:BEST9:Medium; -#SONG:BEST10:Medium; -#SONG:BEST11:Medium; -#SONG:BEST12:Medium; +#COURSE:Most Played 09-12; +#SONG:BEST9:Medium; +#SONG:BEST10:Medium; +#SONG:BEST11:Medium; +#SONG:BEST12:Medium; diff --git a/Courses/Default/MostPlayed_09-12.png b/Courses/Default/MostPlayed_09-12.png new file mode 100644 index 0000000000..7fa297b596 Binary files /dev/null and b/Courses/Default/MostPlayed_09-12.png differ diff --git a/Courses/Samples/PlayersBest13-16.crs b/Courses/Default/MostPlayed_13-16.crs similarity index 72% rename from Courses/Samples/PlayersBest13-16.crs rename to Courses/Default/MostPlayed_13-16.crs index 1b0b9c91fd..259bc27823 100644 --- a/Courses/Samples/PlayersBest13-16.crs +++ b/Courses/Default/MostPlayed_13-16.crs @@ -1,5 +1,5 @@ -#COURSE:Players Best 13-16; -#SONG:BEST13:Medium; -#SONG:BEST14:Medium; -#SONG:BEST15:Medium; -#SONG:BEST16:Medium; +#COURSE:Most Played 13-16; +#SONG:BEST13:Medium; +#SONG:BEST14:Medium; +#SONG:BEST15:Medium; +#SONG:BEST16:Medium; diff --git a/Courses/Default/MostPlayed_13-16.png b/Courses/Default/MostPlayed_13-16.png new file mode 100644 index 0000000000..49e1208b17 Binary files /dev/null and b/Courses/Default/MostPlayed_13-16.png differ diff --git a/Courses/Samples/AllChallenge.crs b/Courses/Samples/AllChallenge.crs deleted file mode 100644 index 57c88f51b9..0000000000 --- a/Courses/Samples/AllChallenge.crs +++ /dev/null @@ -1,7 +0,0 @@ -#COURSE:All Challenge; -#LIVES:4; -#SONG:*:CHALLENGE; -#SONG:*:CHALLENGE; -#SONG:*:CHALLENGE; -#SONG:*:CHALLENGE; -#SONG:*:CHALLENGE; \ No newline at end of file diff --git a/Courses/Samples/AllMusicRandom.crs b/Courses/Samples/AllMusicRandom.crs deleted file mode 100644 index 26dec2cccd..0000000000 --- a/Courses/Samples/AllMusicRandom.crs +++ /dev/null @@ -1,5 +0,0 @@ -#COURSE:All Music Random; -#SONG:*:Medium:; -#SONG:*:Medium:; -#SONG:*:Medium:; -#SONG:*:Medium:; diff --git a/Courses/Samples/EndOfTheRoad.crs b/Courses/Samples/EndOfTheRoad.crs deleted file mode 100644 index 562cb4a5a3..0000000000 --- a/Courses/Samples/EndOfTheRoad.crs +++ /dev/null @@ -1,10 +0,0 @@ -#COURSE:End of the Road; -#LIVES:4; -#SONG:*:7..7:1.5x,reverse; -#SONG:*:7..7:expand; -#SONG:*:8..8:0.25x; -#SONG:*:8..8:hidden,boost; -#SONG:*:9..9:3.0x,dark,reverse; -#SONG:*:9..9:land,big,supershuffle; -#SONG:*:10..10:1.2xmusic,dizzy,drunk; -#SONG:*:10..10:tornado,shuffle,dark; \ No newline at end of file diff --git a/Courses/Samples/PlayersWorst.crs b/Courses/Samples/PlayersWorst.crs deleted file mode 100644 index 9a493263ae..0000000000 --- a/Courses/Samples/PlayersWorst.crs +++ /dev/null @@ -1,5 +0,0 @@ -#COURSE:Players Worst; -#SONG:WORST1:Medium; -#SONG:WORST2:Medium; -#SONG:WORST3:Medium; -#SONG:WORST4:Medium; diff --git a/Courses/Samples/Random Caprice.crs b/Courses/Samples/Random Caprice.crs deleted file mode 100644 index f4e771e4b4..0000000000 --- a/Courses/Samples/Random Caprice.crs +++ /dev/null @@ -1,6 +0,0 @@ -#COURSE:Random Caprice; - -#SONG:*:ANOTHER:showcourse; -#SONG:*:ANOTHER:showcourse; -#SONG:*:ANOTHER:showcourse; -#SONG:*:ANOTHER:showcourse; diff --git a/Courses/Samples/StaminaTester.crs b/Courses/Samples/StaminaTester.crs deleted file mode 100644 index e593395834..0000000000 --- a/Courses/Samples/StaminaTester.crs +++ /dev/null @@ -1,7 +0,0 @@ -#COURSE:Stamina Tester Random; -#LIVES:4; -#SONG:*:9..10; -#SONG:*:9..10; -#SONG:*:9..10; -#SONG:*:9..10; -#SONG:*:9..10; diff --git a/Courses/Samples/StepMix Survival Sample.crs b/Courses/Samples/StepMix Survival Sample.crs deleted file mode 100644 index 14e49da7a9..0000000000 --- a/Courses/Samples/StepMix Survival Sample.crs +++ /dev/null @@ -1,66 +0,0 @@ -#COURSE:StepMix Survival; -#METER:Regular:13; -#GAINSECONDS:90; -#MODS: -TIME=0.008:END=30.865:MODS=3.3x,Hidden,50% HiddenOffset,50% Sudden: -TIME=30.865:END=37.722:MODS=1.1x,*1.1 Brake: -TIME=37.722:END=91.3:MODS=*1.1 2.2x: -TIME=37.722:END=56.586:MODS=*.2 20% Expand: -TIME=56.586:END=75.443:MODS=*.2 40% Expand: -TIME=75.443:END=91.3:MODS=*.2 80% Expand: -TIME=91.3:END=120.5:MODS=*3.3 3.3x,*3.3 Hidden,50% HiddenOffset,*3.3 50% Sudden,*3.3 -60% Expand; -#SONG:*:HARD:; -#GAINSECONDS:50; -#MODS: -TIME=0:END=118.5:MODS=2x: -TIME=12.986:END=35.980:MODS=Hallway,Boomerang: -TIME=35.980:END=47.477:MODS=*5 120% Wave: -TIME=47.477:END=58.974:MODS=*5 5% Flip,*5 -50% Tiny,*5 1.75x,*5 no Wave: -TIME=58.974:END=70.471:MODS=*5 10% Flip,*5 -100% Tiny,*5 1.5x: -TIME=70.471:END=81.968:MODS=*5 15% Flip,*5 -150% Tiny,*5 1.25x: -TIME=81.968:END=93.465:MODS=*5 20% Flip,*5 -200% Tiny,*5 1x: -TIME=93.465:END=96:MODS=*5 no Flip,*5 no Tiny,*5 2x: -TIME=93.465:END=104.962:MODS=*5 120% Wave: -TIME=104.962:END=118.5:MODS=*0.15 Distant, *0.15 200% Tiny,*5 no Wave; -#SONG:*:HARD:; -#GAINSECONDS:50; -#MODS: -TIME=0.420:END=103.576:MODS=2x: -TIME=0.420:END=6.325:MODS=*5 10% Beat: -TIME=6.325:END=12.23:MODS=*5 20% Beat: -TIME=12.13:END=18.135:MODS=*5 30% Beat: -TIME=18.135:END=32.899:MODS=*5 40% Beat: -TIME=32.899:END=38.804:MODS=*5 50% Beat: -TIME=38.804:END=44.709:MODS=*5 60% Beat: -TIME=44.709:END=50.614:MODS=*5 70% Beat: -TIME=50.614:END=56.519:MODS=*5 80% Beat: -TIME=56.519:END=62.425:MODS=*5 90% Beat: -TIME=62.425:END=68.330:MODS=*5 Beat: -TIME=68.330:END=74.235:MODS=*5 120% Beat: -TIME=74.235:END=80.140:MODS=*5 140% Beat: -TIME=80.140:END=86.045:MODS=*5 160% Beat: -TIME=86.045:END=91.950:MODS=*5 180% Beat: -TIME=91.950:END=97.855:MODS=*5 200% Beat: -TIME=97.855:END=103.576:MODS=*.25 no Beat:; -#SONG:*:HARD:; -#GAINSECONDS:70; -#MODS: -TIME=0:END=109.399:MODS=2.25x: -TIME=4.462:END=71.262:MODS=25% Flip,-25% Invert: -TIME=31.262:LEN=1.6:MODS=nojumps: -TIME=32.862:END=39.262:MODS=noholds: -TIME=58.862:END=71.262:MODS=noholds,nojumps: -TIME=71.262:END=82.464:MODS=*1.25 Flip: -TIME=82.464:END=109.399:MODS=25% Flip,25% Invert: -TIME=96.599:LEN=12.8:MODS=nojumps; -#SONG:*:HARD:; -#GAINSECONDS:70; -#MODS: -TIME=0:END=118.366:MODS=2.5x,Blind: -TIME=5.122:END=35.545:MODS=*5 Alternate: -TIME=35.545:END=49.066:MODS=*5 no Alternate,*5 Split: -TIME=49.066:END=76.108:MODS=*5 no Split,*5 Alternate,*5 Reverse: -TIME=76.108:END=89.629:MODS=*5 no Alternate,*5 Split,*5 Reverse: -TIME=89.629:LEN=1:MODS=*5 no Split,*5 no Reverse: -TIME=103.152:END=118.366:MODS=*.125 125% Centered,*.125 1x,*.075 Stealth,*.075 Dark:; -#SONG:*:EXPERT:; diff --git a/Courses/Samples/Tortoise and the Hare.crs b/Courses/Samples/Tortoise and the Hare.crs deleted file mode 100644 index b0e41a52fe..0000000000 --- a/Courses/Samples/Tortoise and the Hare.crs +++ /dev/null @@ -1,5 +0,0 @@ -#COURSE:Tortoise and the Hare; -#SONG:*:Medium:0.8xmusic; -#SONG:*:Medium:1.1xmusic; -#SONG:*:Medium:1.3xmusic; -#SONG:*:Medium:1.5xmusic; diff --git a/Courses/Samples/TrickyRandom.crs b/Courses/Samples/TrickyRandom.crs deleted file mode 100644 index 8d8f3bb067..0000000000 --- a/Courses/Samples/TrickyRandom.crs +++ /dev/null @@ -1,5 +0,0 @@ -#COURSE:Tricky Random; -#SONG:*:Medium:1.5x,reverse; -#SONG:*:Medium:expand; -#SONG:*:Medium:0.25x,dark; -#SONG:*:Medium:sudden,land; diff --git a/Courses/instructions.txt b/Courses/instructions.txt index bde3f1d006..55ab90a49c 100644 --- a/Courses/instructions.txt +++ b/Courses/instructions.txt @@ -1 +1,3 @@ -Place CRS and course banner files here. +Course files (.crs) typically go in folders, though they aren't shown like that +on the wheel... yet. (Coming soon: a metric that allows a theme to do that, once +we get the wheel to treat course directories like song directories) \ No newline at end of file diff --git a/Data/AI.ini b/Data/AI.ini index c2584caf8f..1ca1b06323 100644 --- a/Data/AI.ini +++ b/Data/AI.ini @@ -1,55 +1,55 @@ -[Skill0] -WeightMiss=8 -WeightW5=8 -WeightW4=8 -WeightW3=30 -WeightW2=30 -WeightW1=30 - -[Skill1] -WeightMiss=5 -WeightW5=5 -WeightW4=5 -WeightW3=25 -WeightW2=30 -WeightW1=35 - -[Skill2] -WeightMiss=3 -WeightW5=3 -WeightW4=3 -WeightW3=20 -WeightW2=30 -WeightW1=40 - -[Skill3] -WeightMiss=2 -WeightW5=2 -WeightW4=2 -WeightW3=15 -WeightW2=30 -WeightW1=45 - -[Skill4] -WeightMiss=1 -WeightW5=1 -WeightW4=1 -WeightW3=10 -WeightW2=30 -WeightW1=50 - -[Skill5] -WeightMiss= -WeightW5=1 -WeightW4=1 -WeightW3=5 -WeightW2=30 -WeightW1=55 - -[Skill6] -WeightMiss= -WeightW5= -WeightW4= -WeightW3=5 -WeightW2=30 -WeightW1=70 +[Skill0] +WeightMiss=8 +WeightW5=8 +WeightW4=8 +WeightW3=30 +WeightW2=30 +WeightW1=30 + +[Skill1] +WeightMiss=5 +WeightW5=5 +WeightW4=5 +WeightW3=25 +WeightW2=30 +WeightW1=35 + +[Skill2] +WeightMiss=3 +WeightW5=3 +WeightW4=3 +WeightW3=20 +WeightW2=30 +WeightW1=40 + +[Skill3] +WeightMiss=2 +WeightW5=2 +WeightW4=2 +WeightW3=15 +WeightW2=30 +WeightW1=45 + +[Skill4] +WeightMiss=1 +WeightW5=1 +WeightW4=1 +WeightW3=10 +WeightW2=30 +WeightW1=50 + +[Skill5] +WeightMiss= +WeightW5=1 +WeightW4=1 +WeightW3=5 +WeightW2=30 +WeightW1=55 + +[Skill6] +WeightMiss= +WeightW5= +WeightW4= +WeightW3=5 +WeightW2=30 +WeightW1=70 diff --git a/Data/NamesBlacklist.txt b/Data/NamesBlacklist.txt index 8f0f690293..6b4a966785 100644 --- a/Data/NamesBlacklist.txt +++ b/Data/NamesBlacklist.txt @@ -1,2 +1,2 @@ -#P1# -#P2# +#P1# +#P2# diff --git a/Data/Shaders/GLSL/Cel.frag b/Data/Shaders/GLSL/Cel.frag new file mode 100644 index 0000000000..7d3c8587d4 --- /dev/null +++ b/Data/Shaders/GLSL/Cel.frag @@ -0,0 +1,24 @@ +varying vec2 texCoords; +varying vec3 normal, viewVector; +varying vec4 lightVector, lightColor; + +uniform sampler2D Texture1; + +void main(void) +{ + float intensity = dot(normal, lightVector.xyz); + float fresnel = pow(1.0 - dot(viewVector, normal), 5.0); + fresnel = fresnel < 0.5 ? 0.0 : 0.4; + + float shade = 1.0; + if( intensity > 0.35 ) + shade = clamp(1.0 * intensity + 0.4, 0.0, 1.0); + else + shade = clamp(0.85 * intensity + 0.25, 0.4, 0.6); + shade = clamp(shade - fresnel, 0.3, 1.0); + + vec4 vcol = gl_FrontMaterial.diffuse; + vec4 tex = texture2D(Texture1, texCoords); + + gl_FragColor = lightColor * vec4(tex.rgb * shade, 1.0); +} \ No newline at end of file diff --git a/Data/Shaders/GLSL/Cel.vert b/Data/Shaders/GLSL/Cel.vert new file mode 100644 index 0000000000..5037116828 --- /dev/null +++ b/Data/Shaders/GLSL/Cel.vert @@ -0,0 +1,16 @@ +varying vec3 normal, viewVector; +varying vec4 lightVector, lightColor; +varying vec2 texCoords; + +void main(void) +{ + texCoords = gl_MultiTexCoord0.st; + + vec4 objectPos = gl_ModelViewMatrix * gl_Vertex; + + normal = gl_NormalMatrix * gl_Normal; + lightVector = normalize(gl_LightSource[0].position); + lightColor = gl_LightSource[0].diffuse; + viewVector = normalize(vec3(0) - objectPos.xyz); + gl_Position = ftransform(); +} \ No newline at end of file diff --git a/Data/Shaders/GLSL/Color burn.frag b/Data/Shaders/GLSL/Color burn.frag index 9cf97729a3..309194559c 100644 --- a/Data/Shaders/GLSL/Color burn.frag +++ b/Data/Shaders/GLSL/Color burn.frag @@ -1,65 +1,65 @@ -uniform sampler2D Texture1; -uniform sampler2D Texture2; - -vec4 ApplyBurn( vec4 over, vec4 under, float fill ) -{ - vec3 NeutralColor = vec3(1,1,1); - over.rgb = mix( NeutralColor, over.rgb, fill ); - - vec4 ret; - ret.rgb = (over.rgb + under.rgb - 1.0); - - ret.rgb /= max(over.rgb, 0.000001); - ret.rgb *= over.a*under.a; - ret = clamp( ret, 0.0, 1.0 ); - - ret.a = over.a * under.a; - - return ret; -} - -void main(void) -{ - vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); - vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); - - vec4 ret = ApplyBurn( over, under, gl_Color.a ); - - ret.rgb += (1.0 - over.a) * under.rgb * under.a; - ret.a += (1.0 - over.a) * under.a; - - over.a *= gl_Color.a; - ret.rgb += (1.0 - under.a) * over.rgb * over.a; - ret.a += (1.0 - under.a) * over.a; - - ret.rgb /= ret.a; - - gl_FragColor = ret; - return; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyBurn( vec4 over, vec4 under, float fill ) +{ + vec3 NeutralColor = vec3(1,1,1); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + vec4 ret; + ret.rgb = (over.rgb + under.rgb - 1.0); + + ret.rgb /= max(over.rgb, 0.000001); + ret.rgb *= over.a*under.a; + ret = clamp( ret, 0.0, 1.0 ); + + ret.a = over.a * under.a; + + return ret; +} + +void main(void) +{ + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + vec4 ret = ApplyBurn( over, under, gl_Color.a ); + + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Shaders/GLSL/Color dodge.frag b/Data/Shaders/GLSL/Color dodge.frag index 99a445e26f..a5e4819655 100644 --- a/Data/Shaders/GLSL/Color dodge.frag +++ b/Data/Shaders/GLSL/Color dodge.frag @@ -1,66 +1,66 @@ -uniform sampler2D Texture1; -uniform sampler2D Texture2; - -vec4 ApplyDodge( vec4 over, vec4 under, float fill ) -{ - vec3 NeutralColor = vec3(0,0,0); - over.rgb = mix( NeutralColor, over.rgb, fill ); - - vec4 ret; - ret.rgb = under.rgb; - - ret.rgb /= max(1.0-over.rgb, 0.000001); - ret.rgb = min(ret.rgb, 1.0); - ret.rgb *= over.a*under.a; -// ret = clamp( ret, 0.0, 1.0 ); - - ret.a = over.a * under.a; - - return ret; -} - -void main(void) -{ - vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); - vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); - - vec4 ret = ApplyDodge( over, under, gl_Color.a ); - - ret.rgb += (1.0 - over.a) * under.rgb * under.a; - ret.a += (1.0 - over.a) * under.a; - - over.a *= gl_Color.a; - ret.rgb += (1.0 - under.a) * over.rgb * over.a; - ret.a += (1.0 - under.a) * over.a; - - ret.rgb /= ret.a; - - gl_FragColor = ret; - return; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyDodge( vec4 over, vec4 under, float fill ) +{ + vec3 NeutralColor = vec3(0,0,0); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + vec4 ret; + ret.rgb = under.rgb; + + ret.rgb /= max(1.0-over.rgb, 0.000001); + ret.rgb = min(ret.rgb, 1.0); + ret.rgb *= over.a*under.a; +// ret = clamp( ret, 0.0, 1.0 ); + + ret.a = over.a * under.a; + + return ret; +} + +void main(void) +{ + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + vec4 ret = ApplyDodge( over, under, gl_Color.a ); + + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Shaders/GLSL/Hard mix.frag b/Data/Shaders/GLSL/Hard mix.frag index 0f8e0568ff..ac6b16b923 100644 --- a/Data/Shaders/GLSL/Hard mix.frag +++ b/Data/Shaders/GLSL/Hard mix.frag @@ -1,92 +1,92 @@ -uniform sampler2D Texture1; -uniform sampler2D Texture2; - -vec4 ApplyVividLight( vec4 over, vec4 under, float fill ) -{ - vec3 NeutralColor = vec3(.5,.5,.5); - over.rgb = mix( NeutralColor, over.rgb, fill ); - - over.rgb -= 0.5; - over.rgb *= 2.0; - - vec4 ret; - ret.rgb = under.rgb; - ret.rgb += min(over.rgb, 0.0); - ret.rgb /= max(1.0-abs(over.rgb), 0.000001); - ret.rgb *= under.a; - ret = clamp( ret, 0.0, 1.0 ); - ret.rgb *= over.a; - - ret.a = over.a * under.a; - - return ret; -} - -vec4 ApplyHardMix( vec4 over, vec4 under, float fill ) -{ - vec4 ret = ApplyVividLight( over, under, gl_Color.a ); - - /* ret is premultiplied. Undo this, so we have a - * 0..1 range for color. */ - ret.rgb /= ret.a; - - fill *= fill; - - /* Posterize, with a threshold based on fill. This is a rough - * approximation. */ - float low = 0.5-(1.0-fill)*0.5; - float high = 0.5+(1.0-fill)*0.5+0.00001; - ret.rgb = (ret.rgb - low) / (high - low); - ret = clamp( ret, 0.0, 1.0 ); - - /* Premultiply it, for the rest of the calculation. */ - ret.rgb *= ret.a; - - return ret; -} - -void main(void) -{ - vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); - vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); - - vec4 ret = ApplyHardMix( over, under, gl_Color.a ); - - ret.rgb += (1.0 - over.a) * under.rgb * under.a; - ret.a += (1.0 - over.a) * under.a; - - over.a *= gl_Color.a; - ret.rgb += (1.0 - under.a) * over.rgb * over.a; - ret.a += (1.0 - under.a) * over.a; - - ret.rgb /= ret.a; - - gl_FragColor = ret; - return; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyVividLight( vec4 over, vec4 under, float fill ) +{ + vec3 NeutralColor = vec3(.5,.5,.5); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + over.rgb -= 0.5; + over.rgb *= 2.0; + + vec4 ret; + ret.rgb = under.rgb; + ret.rgb += min(over.rgb, 0.0); + ret.rgb /= max(1.0-abs(over.rgb), 0.000001); + ret.rgb *= under.a; + ret = clamp( ret, 0.0, 1.0 ); + ret.rgb *= over.a; + + ret.a = over.a * under.a; + + return ret; +} + +vec4 ApplyHardMix( vec4 over, vec4 under, float fill ) +{ + vec4 ret = ApplyVividLight( over, under, gl_Color.a ); + + /* ret is premultiplied. Undo this, so we have a + * 0..1 range for color. */ + ret.rgb /= ret.a; + + fill *= fill; + + /* Posterize, with a threshold based on fill. This is a rough + * approximation. */ + float low = 0.5-(1.0-fill)*0.5; + float high = 0.5+(1.0-fill)*0.5+0.00001; + ret.rgb = (ret.rgb - low) / (high - low); + ret = clamp( ret, 0.0, 1.0 ); + + /* Premultiply it, for the rest of the calculation. */ + ret.rgb *= ret.a; + + return ret; +} + +void main(void) +{ + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + vec4 ret = ApplyHardMix( over, under, gl_Color.a ); + + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Shaders/GLSL/Overlay.frag b/Data/Shaders/GLSL/Overlay.frag new file mode 100644 index 0000000000..cf29cf6304 --- /dev/null +++ b/Data/Shaders/GLSL/Overlay.frag @@ -0,0 +1,67 @@ +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyOverlay( vec4 over, vec4 under, float fill ) +{ + // we want to compare against black for the alpha pass, I think... + vec3 NeutralColor = vec3(0.5,0.5,0.5); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + vec4 ret; + ret.rgb = under.rgb * over.rgb * 2.0; + + ret.rgb = min(ret.rgb, 1.0); + ret.rgb *= over.a * under.a; + + ret.a = over.a * under.a; + return ret; +} + +void main(void) +{ + // creates two vec4s that represent the two textures. + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + // the return value is also a vec4. + vec4 ret = ApplyOverlay( over, under, gl_Color.a ); + + // glenn does some math here that I don't understand just yet. + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + // this is unpremultiply though: + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2009 AJ Kelly + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/Data/Shaders/GLSL/Screen.frag b/Data/Shaders/GLSL/Screen.frag new file mode 100644 index 0000000000..97763f30f3 --- /dev/null +++ b/Data/Shaders/GLSL/Screen.frag @@ -0,0 +1,66 @@ +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyScreen( vec4 over, vec4 under, float fill ) +{ + vec3 NeutralColor = vec3(0.5,0.5,0.5); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + vec4 ret; + ret.rgb = (1.0 - ((1.0 - under.rgb) * (1.0 - over.rgb))); + + ret.rgb = min(ret.rgb, 1.0); + ret.rgb *= over.a * under.a; + + ret.a = over.a * under.a; + return ret; +} + +void main(void) +{ + // creates two vec4s that represent the two textures. + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + // the return value is also a vec4. + vec4 ret = ApplyScreen( over, under, gl_Color.a ); + + // glenn does some math here that I haven't put the time in to understand yet. + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + // this is unpremultiply though: + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2009 AJ Kelly + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/Data/Shaders/GLSL/Texture matrix scaling.vert b/Data/Shaders/GLSL/Texture matrix scaling.vert index 9bc1e55360..80abd6b1b3 100644 --- a/Data/Shaders/GLSL/Texture matrix scaling.vert +++ b/Data/Shaders/GLSL/Texture matrix scaling.vert @@ -1,11 +1,11 @@ -attribute vec4 TextureMatrixScale; - -void main(void) -{ - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vec4 multiplied_tex_coord = gl_TextureMatrix[0] * gl_MultiTexCoord0; - gl_TexCoord[0] = (multiplied_tex_coord * TextureMatrixScale) + - (gl_MultiTexCoord0 * (vec4(1)-TextureMatrixScale)); - gl_FrontColor = gl_Color; -} - +attribute vec4 TextureMatrixScale; + +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + vec4 multiplied_tex_coord = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_TexCoord[0] = (multiplied_tex_coord * TextureMatrixScale) + + (gl_MultiTexCoord0 * (vec4(1)-TextureMatrixScale)); + gl_FrontColor = gl_Color; +} + diff --git a/Data/Shaders/GLSL/Unpremultiply.frag b/Data/Shaders/GLSL/Unpremultiply.frag index 7342072194..814da0f9a8 100644 --- a/Data/Shaders/GLSL/Unpremultiply.frag +++ b/Data/Shaders/GLSL/Unpremultiply.frag @@ -1,37 +1,37 @@ -uniform sampler2D Texture1; - -void main(void) -{ - vec4 ret = texture2DProj( Texture1, gl_TexCoord[0] ); - if( ret.a != 0.0 ) - ret.rgb /= ret.a; - - gl_FragColor = ret; - return; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; + +void main(void) +{ + vec4 ret = texture2DProj( Texture1, gl_TexCoord[0] ); + if( ret.a != 0.0 ) + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Shaders/GLSL/Vivid light.frag b/Data/Shaders/GLSL/Vivid light.frag index e7b04f88a8..ae5d7e7c59 100644 --- a/Data/Shaders/GLSL/Vivid light.frag +++ b/Data/Shaders/GLSL/Vivid light.frag @@ -1,69 +1,69 @@ -uniform sampler2D Texture1; -uniform sampler2D Texture2; - -vec4 ApplyVividLight( vec4 over, vec4 under, float fill ) -{ - vec3 NeutralColor = vec3(.5,.5,.5); - over.rgb = mix( NeutralColor, over.rgb, fill ); - - over.rgb -= 0.5; - over.rgb *= 2.0; - - vec4 ret; - ret.rgb = under.rgb; - ret.rgb += min(over.rgb, 0.0); - ret.rgb /= max(1.0-abs(over.rgb), 0.000001); - ret.rgb *= under.a; - ret = clamp( ret, 0.0, 1.0 ); - ret.rgb *= over.a; - - ret.a = over.a * under.a; - - return ret; -} - -void main(void) -{ - vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); - vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); - - vec4 ret = ApplyVividLight( over, under, gl_Color.a ); - - ret.rgb += (1.0 - over.a) * under.rgb * under.a; - ret.a += (1.0 - over.a) * under.a; - - over.a *= gl_Color.a; - ret.rgb += (1.0 - under.a) * over.rgb * over.a; - ret.a += (1.0 - under.a) * over.a; - - ret.rgb /= ret.a; - - gl_FragColor = ret; - return; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; +uniform sampler2D Texture2; + +vec4 ApplyVividLight( vec4 over, vec4 under, float fill ) +{ + vec3 NeutralColor = vec3(.5,.5,.5); + over.rgb = mix( NeutralColor, over.rgb, fill ); + + over.rgb -= 0.5; + over.rgb *= 2.0; + + vec4 ret; + ret.rgb = under.rgb; + ret.rgb += min(over.rgb, 0.0); + ret.rgb /= max(1.0-abs(over.rgb), 0.000001); + ret.rgb *= under.a; + ret = clamp( ret, 0.0, 1.0 ); + ret.rgb *= over.a; + + ret.a = over.a * under.a; + + return ret; +} + +void main(void) +{ + vec4 under = texture2DProj( Texture1, gl_TexCoord[0] ); + vec4 over = texture2DProj( Texture2, gl_TexCoord[0] ); + + vec4 ret = ApplyVividLight( over, under, gl_Color.a ); + + ret.rgb += (1.0 - over.a) * under.rgb * under.a; + ret.a += (1.0 - over.a) * under.a; + + over.a *= gl_Color.a; + ret.rgb += (1.0 - under.a) * over.rgb * over.a; + ret.a += (1.0 - under.a) * over.a; + + ret.rgb /= ret.a; + + gl_FragColor = ret; + return; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Shaders/GLSL/YUYV422.frag b/Data/Shaders/GLSL/YUYV422.frag index f48e325d71..8adc5bf49d 100644 --- a/Data/Shaders/GLSL/YUYV422.frag +++ b/Data/Shaders/GLSL/YUYV422.frag @@ -1,94 +1,94 @@ -uniform sampler2D Texture1; -uniform sampler2D Texture2; -uniform int TextureWidth; - -/* - * Convert from YUYV422 to RGB. - * - * This is used by MovieTexture_Generic. The input texture is TextureWidth - * texels wide, the output texture is TextureWidth*2 texels wide, and texels - * are aligned. We can use this to determine if the fragment we're generating - * is even or odd. - */ -void main(void) -{ - vec4 tex = gl_TexCoord[0]; - - float fRealWidth = float(TextureWidth); - float fU = tex.x; - - /* Scale U to [0.25,fRealWidth+0.25]. */ - fU *= fRealWidth; - - /* Scale the U texture coordinate to the size of the destination texture, - * [0.5,fDestWidth+0.5]. */ - fU *= 2.0; - - /* Texture coordinates are center-aligned; an exact sample lies at 0.5, - * not 0. Shift U from [0.5,fDestWidth+0.5] to [0,fDestWidth]. */ - fU -= 0.5; - - /* If this is an odd fragment, fOdd is 1. */ - float fOdd = mod(fU+0.0001, 2.0); - - /* Align fU to an even coordinate. */ - fU -= fOdd; - - /* Scale U back. Because fU is aligned to an even coordinate, this - * will always be an exact sample. */ - fU += 0.5; - fU /= 2.0; - fU /= fRealWidth; - - tex.x = fU; - - vec4 yuyv = texture2D( Texture1, tex.xy ); - - vec3 yuv; - if( fOdd <= 0.5 ) - yuv = yuyv.rga; - else - yuv = yuyv.bga; - yuv -= vec3(16.0/255.0, 128.0/255.0, 128.0/255.0); - - mat3 conv = mat3( - // Y U (Cb) V (Cr) - 1.1643, 0.000, 1.5958, // R - 1.1643, -0.39173, -0.81290, // G - 1.1643, 2.017, 0.000); // B - - gl_FragColor.r=dot(yuv,conv[0]); - gl_FragColor.g=dot(yuv,conv[1]); - gl_FragColor.b=dot(yuv,conv[2]); - gl_FragColor.a = 1.0; - - /* Why doesn't this work? */ -// gl_FragColor.rgb = yuv * conv; -// gl_FragColor.a = 1.0; -} - -/* - * Copyright (c) 2007 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - +uniform sampler2D Texture1; +uniform sampler2D Texture2; +uniform int TextureWidth; + +/* + * Convert from YUYV422 to RGB. + * + * This is used by MovieTexture_Generic. The input texture is TextureWidth + * texels wide, the output texture is TextureWidth*2 texels wide, and texels + * are aligned. We can use this to determine if the fragment we're generating + * is even or odd. + */ +void main(void) +{ + vec4 tex = gl_TexCoord[0]; + + float fRealWidth = float(TextureWidth); + float fU = tex.x; + + /* Scale U to [0.25,fRealWidth+0.25]. */ + fU *= fRealWidth; + + /* Scale the U texture coordinate to the size of the destination texture, + * [0.5,fDestWidth+0.5]. */ + fU *= 2.0; + + /* Texture coordinates are center-aligned; an exact sample lies at 0.5, + * not 0. Shift U from [0.5,fDestWidth+0.5] to [0,fDestWidth]. */ + fU -= 0.5; + + /* If this is an odd fragment, fOdd is 1. */ + float fOdd = mod(fU+0.0001, 2.0); + + /* Align fU to an even coordinate. */ + fU -= fOdd; + + /* Scale U back. Because fU is aligned to an even coordinate, this + * will always be an exact sample. */ + fU += 0.5; + fU /= 2.0; + fU /= fRealWidth; + + tex.x = fU; + + vec4 yuyv = texture2D( Texture1, tex.xy ); + + vec3 yuv; + if( fOdd <= 0.5 ) + yuv = yuyv.rga; + else + yuv = yuyv.bga; + yuv -= vec3(16.0/255.0, 128.0/255.0, 128.0/255.0); + + mat3 conv = mat3( + // Y U (Cb) V (Cr) + 1.1643, 0.000, 1.5958, // R + 1.1643, -0.39173, -0.81290, // G + 1.1643, 2.017, 0.000); // B + + gl_FragColor.r=dot(yuv,conv[0]); + gl_FragColor.g=dot(yuv,conv[1]); + gl_FragColor.b=dot(yuv,conv[2]); + gl_FragColor.a = 1.0; + + /* Why doesn't this work? */ +// gl_FragColor.rgb = yuv * conv; +// gl_FragColor.a = 1.0; +} + +/* + * Copyright (c) 2007 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + diff --git a/Data/Translations.xml b/Data/Translations.xml index 3cccabfbc0..a50d15f46e 100644 --- a/Data/Translations.xml +++ b/Data/Translations.xml @@ -1,421 +1,439 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Data/splash.png b/Data/splash.png index 583ed066f0..e9d9d20776 100644 Binary files a/Data/splash.png and b/Data/splash.png differ diff --git a/Docs/BGAnimation conditionals.txt b/Docs/BGAnimation conditionals.txt deleted file mode 100644 index c3efb70c22..0000000000 --- a/Docs/BGAnimation conditionals.txt +++ /dev/null @@ -1,90 +0,0 @@ -[this is an alternate, separate system from "ConditionalBGA"] - -Conditionals allow enabling BGAs or portions of BGAs based on a boolean -expression. - -* Quick start - -To only show a BGA on Wednesday: - -[BGAnimation] -Condition=Weekday() == 3 - -[Layer1] -File=star -Command=x,100;y,200 -... - - -To only between 10pm and 3am, use this Condition= line: - Condition=Hour() > 22 or Hour() < 3 - -Only if there are at least 2 stages left: - Condition=NumStagesLeft() >= 2 - -Don't show in demo or jukebox mode: - Condition=not IsDemonstration() - -Only show if the current song is "Happy Birthday": - Condition=CurSong() == Song("Happy Birthday") - -Only display the layer on even days: - math.mod(DayOfMonth(), 2) == 0 - -Only display the layer on odd days: - math.mod(DayOfMonth(), 2) == 0 - -Only display on April Fools: - Condition=MonthOfYear() == 4 and DayOfMonth() == 1 - -Only display on the final stage: - Condition=IsFinalStage() - -Only if the "reverse" modifier is in use by player 1: - Condition=UsingModifier(1, "reverse") - -Only if the "reverse" modifier is in use by player 1 or 2: - Condition=UsingModifier(1, "reverse") or UsingModifier(2, "reverse") - -Only if either player got an AAA or better: - GetBestGrade() <= Grade("AAA") - -* Advanced use - -This can be applied to a single layer of a BGAnimation, by putting -the conditional in the appropriate [Layer] section. - -[Layer1] -File=stage1 -Condition=StageIndex() == 0 - -[Layer2] -File=stage2 -Condition=StageIndex() == 1 - -[Layer3] -File=extra_stage -Condition=IsExtraStage() - - * Complete function list: - -MonthOfYear() month of year (1..12) -DayOfMonth() day of the month (1..31) -Hour() hours past midnight (0..23) -Minute() minutes after the hour (0..59) -Second() seconds after the minute (0..59) -Year() year (eg. 2004) -Weekday() days since Sunday (0..6) -DayOfYear() the number of days since January 1 (0..365) - -StageStats info: - -GetBestGrade() best grade of any active player (AAAA is 0, AAA is 1, etc) -GetWorstGrade() worst grade of any active player -OnePassed() returns true if either player passed -FullCombo(pn) returns true if player "pn" (0 or 1) got a full combo -MaxCombo(pn) returns the given player's max combo -GetGrade(pn) returns the given player's grade -Grade(grade) returns the grade number for a given string -OneGotGrade(pn,n) - diff --git a/Docs/BMA-fmt.txt b/Docs/BMA-fmt.txt deleted file mode 100644 index 11fa70b87f..0000000000 --- a/Docs/BMA-fmt.txt +++ /dev/null @@ -1,79 +0,0 @@ -*** EXPLANATION *** - -BMA is merely a container. It is very expandable, though the -file table could definately use a facelift. Have fun. - -Anything not specified in the file is considered null, and can -be used for any purpose (considering those area are not read, -so custom tags could be added after the main header but before -the file table.) - - - -*** SOURCE HEADERS AND DEFINITIONS *** - -Make sure you use these typedefs: - TypeDef Unsigned Char Int8; - TypeDef Signed Short Int16; - TypeDef Signed Int Int32; - -And constants: - Const BlockSize = 4096; - -And these libraries: - ZLib - - - -*** HEADER *** - -(hex) -Location Type Desc ---------------------------------------------------------------- -00 String(6) "BAMarc" -06 Int16 0xFFFF, identifier -08 Int16 Version #, always 1 for now -0A Int16 Entry count -0C Int8 Entry Table Block -0D Int8 First File Block -0E Int16 Reserved -10 Int8 Creator's name length -11 String(31) Creator's name -30 Int8 Description length -31 String(63) Description - - -*** FILE TABLE *** - (at file offset: EntryTableBlock*BlockSize) - -(hex) -Location Type Desc ---------------------------------------------------------------- -00 Int32 File length, in bytes -04 Int16 File offset, in blocks -06 Int8 Filename length -07 Int8 File flags: - & 0x01 = unused - & 0x02 = unused - & 0x04 = unused - & 0x08 = unused - & 0x10 = unused - & 0x20 = ZLib compressed - & 0x40 = unused - & 0x80 = unused -08 String(24) Filename - - -*** FILE *** - -The file's true offset is at (FileOffsetBlock*BlockSize) in the -file. If a file is ZLIB compressed, there will be an extra -string at the end of the chunk, in ASCII, that contains the -uncompressed file size in bytes. - -OGG audio is not compressed in these files because they can be -loaded directly into memory and played by a sound library. - - - - -=- Created by SaxxonPike, 2004-2005 -=- diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt new file mode 100644 index 0000000000..264cd0e836 --- /dev/null +++ b/Docs/Changelog_sm-ssc.txt @@ -0,0 +1,839 @@ +sm-ssc Changelog +________________________________________________________________________________ +The sm-ssc changelog mainly deals with source code-related changes, as theme +changes happen at a rapid pace. + +Changes are grouped by date. +Not all changes are documented, for various reasons. +(Some changes were later reverted, other changes relate to things that aren't +supported but exist anyways.) +_____________________________________________________________________________ + +sm-ssc Private Beta Wave 1.4 | 20100125 +--------------------------------------- + +20100125 +-------- +* Catching up with StepMania 4 SVN. All code by Glenn Maynard. + * r28254 (GameConstantsAndTypes.h GameManager.cpp): routine style for pump + * r28255 Steps.cpp: fix routine special case so it works in all styles + * r28256 ScoreKeeper.cpp: support ScoreKeeperShared in + ScoreKeeper::MakeScoreKeeper + * r28257 ScreenGameplayShared.cpp: update old ScreenGameplayShared code + to mostly use PlayerInfo::Load; fixes some stuff but still not right + +20100124 +-------- +* [Player] new ScoreMissedHoldsAndRolls metric (FSX) +* [Song] add GetFirstBeat and GetLastBeat Lua bindings +* Make RandomBackgroundMode use BGMODE_RANDOMMOVIES by default + +20100122 +-------- +* Add support for Pump It Up delays with #DELAYS tag in .sm files & treating all + stops in .KSF files as delays. +* Use RollingNumbers methods in ScreenNetEvaluation now that ScreenEvaluation + uses them, as opposed to settext (which caused a few visual issues). +* [ScreenEvaluation] add SongOptions as a metric-able item. + +20100119 +-------- +* Make FGAnimations (#FGCHANGES:) work again. (hopefully; it semeed to work + using a test file.) + +20100118 +-------- +mostly [ScreenNetSelectBase] related changes: +* remove some now-unused metrics (namely ChatInputBoxWidth/Height and + ChatOutputBoxWidth/Height). +* Rename "Meter" to "StepsDisplay" +* RoomWheel now uses a MusicWheel-like setup for items (NormalPart/ColorPart) + instead of a single bar graphic. + +20100117 +-------- +* [ScreenNetSelectBase] Sprite -> AutoActor for chat boxes, un-hardcode some + commands on items to allow for better theming. +* Disable Control+Letter "sort by title" shortcut in course mode. + +20100116 +-------- +* Pump-Doubles has better (more accurate?) spacing between the two sides +* Enable saving replays. The replay data format will likely change over time, + and there is currently no mechanism to replay the data back as another player. + +20100114 +-------- +* add GAMESTATE:GetHardestStepsDifficulty() Lua binding +* Don't complain about #SELECTABLE:Roulette; even though it's not implemented + for some reason. + +20100112 +-------- +* Added more milestones (25, 50, 250) +* {issue 73} If the wheel is locked, don't accept Ctrl+Letter to sort +* [NotesLoaderKSF] implement DirectMove |E| type (DelayBeat) + +20100111 +-------- +* [CourseLoaderCRS.cpp] add GRADEBEST and GRADEWORST to possible values. + +20100107 +-------- +* [GameConstantsAndTypes.h] bump MAX_METER from 13 to 20. +* [MemoryCardManager] add GetName(pn) Lua binding. Returns the name of the device. + +sm-ssc Private Beta Wave 1.3 | 20100106 +--------------------------------------- + +20100105 +-------- +* [LifeMeterBattery] Instead of using various hardcoded values, make them metrics. + BatteryBlinkTime (float), BatteryP*X/Y and NumLivesP*X/Y metrics added. +* [GameSoundManager] use the sound's fade in and out times instead of the + hardcoded fade in (1.5sec) and out (0.3sec) times. + +20100101 +-------- +* [GrooveRadar] run commands on RadarValueMapP* so we can color it again +* [Song.cpp] Make AutoGen on Pump a bit more bearable by only AutoGenerating + Medium difficulty for HalfDoubles steps. + +20091229 +-------- +* [GameState] new Lua bindings: JoinPlayer(pn), UnjoinPlayer(pn), and + GetSongPercent(fBeat) + +20091227 +-------- +* [ScreenSelectMusic] Allow un-selecting the song if two part selection is + enabled (press back). Only works if all human players have not chosen steps + yet. (If a player has chosen steps and the other wants to change the song, + the other player has to cancel his step selection.) +* [NoteSkinManager] New Lua binding NOTESKIN:DoesNoteSkinExist(sName) for + finding if the specified noteskin exists in the current gametype. + +20091226 +-------- +* New Lua binding: NOTESKIN:GetNoteSkinNames(), which returns a table of all + noteskins for the current gametype. + +20091225 +-------- +* New Lua bindings for Profile: GetTotalSessions(), GetTotalSessionSeconds(), + GetTotalGameplaySeconds() + +20091221 +-------- +* Support "converge" as an alias for "centered" since some courses use it. + +20091220 +-------- +* [EditMenu] new metric TextBannerType +* Fixed issue 38 (Servers line in ScreenNetworkOptions) + +20091219 +-------- +* Make it possible to change the alpha of the center of the groove radar [shakesoda] +* [ScreenSelectMusic] make profile load with late join on. [AJ] +* Fix OS hotkey issues by invalidating input on ScreenEdit while meta keys + (cmd or winkey) are being held. [shakesoda] + +sm-ssc Private Beta Wave 1.2 | 20091219 +--------------------------------------- +Theme-related additions/bugfixes aren't listed here, usually. + +20091218 +-------- +* Fix bug in GAMESTATE:GetCurrentSteps(pn) where it didn't bother trying to + return the player's actual steps before trying to do: + (1) SongUtil::GetOneSteps( p->m_pCurSong.Get(), GAMESTATE->GetCurrentStyle()->m_StepsType, GAMESTATE->m_PreferredDifficulty[pn] ); + (2) SongUtil::GetOneSteps( p->m_pCurSong.Get(), GAMESTATE->GetCurrentStyle()->m_StepsType, GAMESTATE->GetClosestShownDifficulty(pn) ); + And with AutoSetStyle on, how the hell is it going to know the style with + those two SongUtil things in the way? By moving the player's steps to the + top, that fixes the problem. -aj + +20091217 +-------- +* Make DeviceList on ScreenTestInput metricable + (commands only, X and Y are elusive for some reason.) + +20091215 +-------- +* Fix option underlines diffusing color when they should just be diffusing alpha. +* [ScreenOptions] new Lua binding: AllAreOnLastRow() +* [ScreenSelectMaster] add DoSwitchAnyways [shakesoda] + +20091214 +-------- +* new Course Lua bindings: IsNonstop(), IsOni(), HasBanner() + +20091213 +-------- +* Support Pump it Up Exceed PS2 USB mat [galopin] + (see stepmania-devs mailing list 20091213 11:27 -0800 [Pacific Standard Time]) + +20091212 +-------- +* (smpackage) sm4svn r28243: "fix for FlushDirCache" [Chris Danford] +* Fix Beginner Helper rest location [sy567] + (see http://www.stepmania.com/forums/showpost.php?p=158721&postcount=12) + +20091211 +-------- +Cel shader update [shakesoda] + +20091209 +-------- +[StepsDisplay] StepsType is an AutoActor now (was Sprite) + +================================================================================ +sm-ssc Private Beta Wave 1.1 | 20091208 +-------------------------------------------------------------------------------- +Theme-related bugfixes aren't listed here, usually. +See the sm-ssc bugtracker at http://ssc.ajworld.net/sm-ssc/bugtracker/ for more +information on bugs, feature requests, and the status of both. + +In addition to the bugfixes, the following changes have been made: + +20091208 +-------- +Refresh the metrics when changing the gametype. Fixes an issue where changing +the gametype causes the DifficultyList/StepsDisplayList to not show anything. + +20091207 +-------- +* [Character.cpp] fix GetModelPath() Lua binding. +* [Sprite.cpp] add GetState() and GetNumStates() Lua bindings. + +20091206 +-------- +Implement a patch to support modern versions of ffmpeg. +(See http://www.stepmania.com/forums/showthread.php?t=21434 for more info.) + +Petr Baudis (3): + video.m4: Add libswscale checks. + MovieTexture_FFMpeg: Port img_convert to libswscale method. + MovieTexture_Theora: Port img_convert to libswscale method. + +David Santamara Rogado (howl) (12): + video.m4: Simplify FFMpeg checks. + ArchHooks_Unix: Correct ffmpeg include. + MovieTexture_FFMpeg: Add and correct ffmpeg necessary includes. + MovieTexture_FFMpeg: Replace avcodec_build() with avcodec_version(), avcodec_build() now doesn't exists and avcodec_version() has always return the same value of avcodec_build(). + MovieTexture_FFMpeg: Replace avcodec::offset_t type with int64_t type to complain the new FFMpeg API . + MovieTexture_FFMpeg: Corrected seek component of RageProtocol to complain the new FFMpeg, if not videos with malformed headers fails to play. + MovieTexture_FFMpeg: Fix compilation warning of RageProtocol. + MovieTexture_FFMpeg: Add destruction conditions for swscale context to avoid possible crashes. + MovieTexture_FFMpeg: Add initialization conditions for swscale context to avoid possible unused memory if there is no garbage collector and improve performance. + MovieTexture_Theora: Add and correct ffmpeg necessary includes. + MovieTexture_Theora: Add destruction conditions for swscale context to avoid possible crashes. + MovieTexture_Theora: Add initialization conditions for swscale context to avoid possible unused memory if there is no garbage collector and improve performance. + +20091205 +-------- +* [Player.cpp/.h] new metric: ComboUnderField. It should be true by default if + you want to match how StepMania 4 does it. [AJ] + +20091204 +-------- +* Fix a sm-ssc bug where you couldn't change course difficulties. + +20091203 +-------- +* Two new GameCommands: + * fademusic,fVolume,fDuration (though I wish fDuration was how long to fade the + music for; instead the fade lengths are consts in GameSoundManager.) + * pushscreen,sScreenName (though it doesn't push screens like I had thought it + would. maybe I'm doing it wrong.) [AJ] + +20091202 +-------- +* Profile name max length changed from 12 to 32 characters. [AJ] +* Modified character camera values. [shakesoda] + +20091201 +-------- +* [ScreenSelectMusic] new metric SamplePreviewMusicMode, which has one of two + possible values as of r127. 'SamplePreviewMusicMode_Normal' is business as + usual (sample music plays), while 'SampleMusicPreviewMode_ScreenMusic' + disables song samples, using /{theme}/Sounds/ScreenSelectMusic loop music.* + as the file to play. No, this doesn't support Lua music yet. [AJ] + +================================================================================ +sm-ssc Private Beta Wave 1 | 20091201 +-------------------------------------------------------------------------------- +The list below comprises sm-ssc Private Beta Wave 1's changes. Some of the +changes are from baseline StepMania 4 SVN, in order to keep compatibility. + +20091130 +-------- +* [StepMania.cpp] (any)Shift+F2 = reload metrics only. + F2 = reload metrics and textures. +* [Course.cpp] GetPlayMode() and GetCourseType() return actual enums now, + instead of numbers. +* Add improved cel shading for people with GLSL support. [shakesoda] + +20091129 +-------- +* [TimingData] add GetActualBPM() Lua binding that returns a table holding the + min and max BPMs, in that order. + +20091127 +-------- +* Disable color keying banners (it's 2009, I don't think anyone is using the + old rotated banners anymore. -aj) [shakesoda] +* Add OptionsListTimeout metric. [shakesoda] + +20091126 (SSC turkey day) +------------------------- +* [Song] new Lua bindings: NormallyDisplayed(), GetStepsSeconds() +* Themes will load Lua scripts from subdirectories first now. + +20091122 +-------- +* [ArchHooks_Unix] Follow user's system language as default. + [David Santamara Rogado (howl)] + See http://www.stepmania.com/forums/showthread.php?t=21471 for more info. + +20091120 +-------- +* Fixed a crash with lifemultipliers > 1.0 in debug builds + +20091117 +-------- +* F2 reloads metrics again, just like in StepMania 3.9. (This is probably one + of those changes that won't get backported to baseline StepMania...) +* [ScoreKeeperNormal] version 0.5 of ToastyTriggersAt added; only allows for + one value, unlike 3.9+ (which used a String with multiple values). The final + version will use a Lua table, similar to [MusicWheel] SortOrders. + +20091116 +-------- +* [Character] new Lua bindings: GetModelPath(), GetRestAnimationPath(), + GetWarmUpAnimationPath(), GetDanceAnimationPath() +* [CharacterManager] GetRandomCharacter() Lua binding added +* [RageFileManager] GetDirListing(sPath,bOnlyDirs,bPathToo) Lua binding added +* [CharacterManager] GetAllCharacters() Lua binding added. + +20091115 +-------- +* Prevent focus lost at Fullscreen on X11, fix windowed->fullscreen resolution + changes so that they save [David Santamara Rogado (howl)] + (http://www.stepmania.com/forums/showthread.php?t=21430) + +20091114 +-------- +* Add support for .oga and .ogv files. [David Santamara Rogado (howl)] + (http://pastie.org/698741) + +20091113 +-------- +* sm4svn r28233 [Glenn Maynard]: + "Fix ThemeMetric gives the first value of the enum when the theme + metric is nil, instead of EnumType_INVALID. + This happened because ThemeMetric was setting the value to its default, + eg. EnumType(), when LuaHelpers::FromStack returned false. + This behavior doesn't make sense in the general case, since EnumType() results + in an arbitrary value (the first one) rather than Invalid. Every FromStack + function sets a reasonable default on invalid data, anyway, and only RageColor + and enums can return false in any case. + This fixes CustomDifficulty when CourseType = nil." + +* Fix a crash in StepsDisplay that allows Course mode to at least run. + +20091111 +-------- +* MusicWheelItem SetMessage has a new param, Type (string that returns the + item type). +* Add sort songs by most recently played. (not feature-complete yet.) + +20091103 to 20091109 +-------------------- +* Changes from SM4SVN: + * r28211: [HighScore.cpp] "logic fixup" [Glenn Maynard] + * r28215: "default to showing backgrounds in editor" [Chris Danford] + * r28217: "Fix crash on reload metrics due to faulty FlushDirCache logic." + [Steve Checkoway], implemented along with code that was originally submitted + as r076 but removed. See this fix log to figure out why we'd bother. :) + * r28218: "crash handler is crashing in 2.6.31 in GetBacktrace, causing a + recursive crash handler crash that we aren't handling, leading to recursion" + [Glenn Maynard] + * r28219: "add 'DIRRO' driver for read-only access" [Glenn Maynard] + * r28220: "fix confusing comment. Escaping doesn't affect this; commas aren't + escaped, since they're split from the value itself, long after MsdFile is + loaded." [Glenn Maynard] (We'll be keeping the 1,1,1,1 colors in sm-ssc, and + may provide a compatibility script for SM4SVN, so be on the lookout.) + * r28221: "allow overriding, like PRODUCT_ID" [Glenn Maynard] + * r28222-28223: "adding support for pms files" [GRIM657] + * The pulseaudio patch [David Santamara Rogado (howl), Ondřej Hošek, Damien Thébault] + (see http://www.stepmania.com/forums/showthread.php?t=21348) + * Greg Nadja's OpenGL/Windows patch + * Load Splash.png instead of an .xpm [David Santamara Rogado (howl)] + (http://www.stepmania.com/forums/showpost.php?p=157340&postcount=3) + +* sm-ssc Changes: + * [ScreenSelectMusic.cpp] Add SelectMenuInputMessage, has params Player and + Button. Broadcast messages when holding select and a button other than Select + is pushed. + * Windowed mode is now the default display mode. + * [HighScore.cpp] new Lua bindings: + * GetModifiers() + * GetTapNoteScore(TapNoteScore) + * GetHoldNoteScore(HoldNoteScore) + * GetRadarValues() + * [ProfileManager.cpp] added IsSongNew(Song) Lua binding + +r088 | 20091101 12:19:47 +------------------------ +* SM4SVN r28203-28208, all by Glenn Maynard. + * r28203: "skip exporting round data when nothing was played (no taps, no holds)" + * r28204: "fix signatures not being written" (we had this already) + * r28205: "don't fail if there's no course; just hide" + * r28206: "move course rename and delete into Overview" + * r28208: "disable rename and delete for courses that havn't been saved yet" +r28207 was a theme edit. + +20091029 +-------- +sm4svn r28202: helper for cycling through an enum [Glenn Maynard] + +20091028 +-------- +sm4svn r28201: "refactor RageInput to not call GetDevicesAndDescriptions +constantly; it can be slightly complex and get called thousands of +times a second" [Glenn Maynard] + +20091027 +-------- +* SM4SVN r28198-28200 + * r28198: Fix GetFileSizeInBytes to return an int instead of unsigned. + "this returns -1 on error (this should actually be 64-bit, + but that's a bigger change)" [Glenn Maynard] + * r28199: The official log is as follows: + "Hack to get the decorations to be deleted. Fixes crashes, + but probably not the best way to go about this." + In addition to doing this, it adds GetChildren() to ActorFrame in the + code itself. (It already existed in Lua, I just felt like pointing + this out. :D) [Steve Checkoway] + * r28200: The official log is as follows: + "Do not use an AutoActor to keep track of the children." + However, this also fixes the hack in r28200. [Steve Checkoway] + +* Allow for Codes on ScreenGameplay. [shakesoda] + +* New Lua bindings for ScreenGameplay: + * PauseGame(bool) - Pauses/unpauses the game. + * IsPaused() - returns true or false depending on if the game is paused or not. + +20091015 +-------- +* Support loading Lua scripts from subdirectories of the Scripts folder, + to allow for better organization. The scripts in the root Scripts folder + will run first, then any Lua scripts in subdirectories of the Scripts folder + will be run. It currently only works with one folder depth, for example: + Scripts/subfolder/script.lua. + + This is not likely to be changed. If you can see a possible need for paths + like Scripts/subfolder/subfolder2/script.lua, please make a Feature Request + ticket on the bugtracker at http://ssc.ajworld.net/sm-ssc/bugtracker/ with + an explanation of what you have in mind. + +20091012 +-------- +* Change BitmapText defaults to no stroke + no shadow. +* Added DefaultTheme preference in order to fix crashes. + (sm-ssc's fallback theme is _fallback [and therefore normally unselectable].) + +20091005 +-------- +* [NotesLoaderSM.cpp] Changes based on SM4SVN r28197 [Archer] + +20091002 +-------- +* Event Mode turned on by default, as it should be. :) + (sm-ssc is a home mode-based version of StepMania.) + +20090925 +-------- +* SM4SVN r28192-28196. + * r28192: HexToBinary for RString -> RString. [Glenn Maynard] + * r28193: show all songs in EditCourse, not just preferred songs [Chris Danford] + * r28194: [ScreenDebugOverlay] Glenn made this themeable in SM4SVN, finally + catching up. This means we've had to rename a few things: + * DebugMenuHeader -> HeaderText + * PageName -> PageText + ButtonText and FunctionText were added, as well. + The font names remain the same, only the metrics change. + (Can you believe they're still using Common normal as the font?) + * r28195,28196: fix ComboChanged message sent when m_bSendJudgmentAndComboMessages + is false, fix doing unnecessary work in multiplayer [Glenn Maynard] + +20090920 +-------- +* [StepsDisplay] Fixed it so it actually shows up again. + +20090919 +-------- +Happy talk like k//eternal day! +* [Font.cpp] Don't show strokes by default. +* [NoteDisplay] fRotation -> fRotationZ in anticipation of multiple rotation mods. +* [PaneDisplay] changed one thing that used a goto; doesn't use it anymore. seems to work for me, though I'm not 100% sure. +* [ThemeManager] don't reload Lua scripts when you reload the metrics. + This is a temporary fix, and may be deemed safe at some point in the future. + +20090914 +-------- +(SM4SVN r28189) + +* SM4SVN r28190,28191 (25 files worth). This was later reverted, as it caused +reloading the metrics to crash. Since sm-ssc is primarily for themers, this is a +dealbreaker. A lot of things were unofficially added to sm-ssc at this point: + +* [ActorFrame] Added RemoveAllChildren() and RemoveChild(sName) bindings. + These are not guaranteed to work. Don't use them. They are very dangerous. +* [IniFile] added Lua's '--' syntax for commenting (along with '//' and '#', + which were already supported). +* New blend modes Modulate (subject to renaming later) and AlphaMultiply. +* [RageUtil] Added various bindings for formatting time that were already built + into StepMania: SecondsToHHMMSS, SecondsToMMSSMsMs, SecondsToMMSSMsMsMs, + SecondsToMSS, SecondsToMMSS. All bindings take in a float (number of seconds). +* [RageUtil] Added IsHexVal(string) binding. +* Added groups to sort length (based on BPM ranges), so the songs no longer + show up without groups. + +20090913 +-------- +(SM4SVN r28180-28185) + +20090913 +-------- +* Added WeightedMultiply and InvertDest blend modes to Direct3D. + +20090912 +-------- +* Change decorations draw order so it breaks things less. + +20090911 +-------- +* "hidden" removed from Actor commands. It was deprecated. + A compatibility alias was added to replicate its functionality. However, this + will not work with NoteSkins, so be sure to make sure to check them for the + use of hidden. + + Handy replacement guide: + hidden,true / hidden,1 = visible,false + hidden,false / hidden,0 = visible,true + +20090907 +-------- +* Add Sprite:CropTo() function + Lua binding. + +20090906 +-------- +* Base theme changed from "default" to "_fallback". + As a result, all themes will fallback on _fallback instead of default. + +20090905 +-------- +* add URLEncode Lua binding to RageUtil. +* [ScreenWithMenuElements.cpp, ThemeManager.cpp] Load and parse Lua as music. + This makes conditional music possible. + +20090904 +-------- +* Change many things on ScreenEdit to go 5 decimal places instead of 3. +* Beginnings of Xbox controller mappings for edit mode (currently untested) + +20090903 +-------- +* Binding naming format changed for BPM bindings. Always uses all caps BPM. + Changes in the codebase due to this: + * [Song] HasSignificantBpmChangesOrStops -> HasSignificantBPMChangesOrStops + * [TimingData] HasBpmChanges -> HasBPMChanges +* [TimingData] New bindings. (GetStops, GetBPMsAndTimes) +* [ScreenPackages] attempt to not call MoveLeft by duplicating code. + Seemed to work okay. + +20090831 +-------- +* ScreenPackages changes: + * Backgrounds from Sprites to AutoActors (Lua can be used now). + * DefaultUrl metric added. +* [ActorScroller] Make naming of commands consistent (some were all lowercase, + some were CamelCase), all are now CamelCase. + +20090828 +-------- +* Added ScreenGameplay:GetPlayerInfo(PlayerNumber) Lua binding + +20090827 +-------- +* Added LifeChanged message to LifeMeterBattery, meaning certain hackily-coded + custom life meters by a certain SSC member can work in Oni mode again. ;) +* MAX_EDIT_STEPS_SIZE_BYTES changed from 30KB to 60KB. +* Added --theme= and --language= command line options. + +20090826 +-------- +* SSE2 build configuration added to Visual Studio 2008 project file. +* new Lua bindings for WheelBase: IsSettled(), IsLocked() + +20090822 +-------- +* Add Beginner meter sort. +* [CommandLineActions] Implement --version command line argument. + Prints out the version of sm-ssc. Please build sm-ssc with HAVE_VERSION_TIME + if possible for compatibility with all possible sm-ssc themes. + +20090821 +-------- +(SM4SVN r28172-28174) + +20090810 +-------- +* [GameCommand.cpp] add GetUrl() Lua binding. +* [GameManager.cpp] add IsGameEnabled(Game) Lua binding. +* [GrooveRadar] name m_GrooveRadarValueMap "RadarValueMap(P1/P2)" + (commands untested); new todo note in header file +* [ScoreDisplayOni.cpp] give it a name ("ScoreDisplayOni Numbers") and run + commands. (untested) +* removing player color diffuse commands, in the hopes this can be replicated + using Lua commands. + [GrooveRadar.cpp, ScoreDisplayLifeTime.cpp, ScreenSelectMusic.cpp] + +20090810 +-------- +(SM4SVN r28170: vdl's fixes for Xbox building; he says they should be tested.) + +20090815 +-------- +* add THEME:GetPathO() Lua binding + +20090810 +-------- +(SM4SVN r28140-r28166; code changes only) + +20090808 +-------- +(SM4SVN r28135, r28137, r28138) +* Lossless screenshots now save as PNG. +* Conversion of decorations to not be children of the screen; they load in + a similar fashion to overlay/underlay, but still using LoadB so everything + works correctly. (Tested against SM4 default theme for compatibility.) + +20090729 +-------- +* add GetRotationX, GetRotationZ commands to Actor +* add urlnoexit game command, which won't exit upon loading the browser. +* add OldHealthState to HealthStateChanged message on ScreenGameplay + +20090726 +-------- +* (untested) GrooveRadar plays commands on the frame now, allowing for +customized in and out transitions, using TweenOnScreen/TweenOffScreen Commands. +* add PlayerController enum binding +* add PlayerState:GetPlayerController() [untested] + +20090725 +-------- +ScreenDebugOverlay changes: +* add OnCommand, X, Y to Debug Header +* add GainFocus/LoseFocus commands to page names +* add LineOnColor/LineOffColor + +20090724 +-------- +* Add StartRoulette and StartRandom messages to MusicWheel. +* Fix default stroke color and shadow length. (BitmapText) + +20090719 +-------- +* patch by theDtTvB: http://share11.appspot.com/20421 + (some parts relating to Player.cpp were later reverted; will be reimplemented) +* Add SetPref to GameCommands. + +20090718 +-------- +* New ThemeManager Lua bindings: + * GetCurrentThemeDirectory + * ReloadMetrics +* Added more internal font mappings: auxc, auxd, auxz, auxwhite, auxblack, + auxlb, auxrb, auxlt, auxrt +* Add conf,PercentageScoring. + +20090712 +-------- +* ActorScroller: add GetNumItems binding. +* ThemeManager: add bindings for GetThemeDisplayName() and + GetThemeDisplayAuthor() (for the current theme only). + +20090711 +-------- +* Fixes songs with only Edit steps from crashing. +* Lights fix from ??? +* Add GAMESTATE:IsBattleMode() binding. + +20090708 +-------- +* (sync with SM4SVN: LightsManager.cpp, ScreenGameplay.cpp) + +20090707 +-------- +* Add GetProfileDir() binding to ProfileManager. +* Added ProfileSlotNames enum. +* Add broadcasted message "SongChosen" on ScreenSelectMusic. + +20090626 +-------- +* Allow meters to go up to 20 in Edit Mode. + +20090623 +-------- +* Added io, os, and packages to Lua bindings. They are disabled for now. +* Fix instance in ScreenSelectMaster where hitting Up wouldn't count as going + backwards. + +20090617 +-------- +* Add Overlay shader. [AJ] + +20090615 +-------- +(sync with SM4SVN) + +More Lua bindings: +* PlayerStageStats:FullComboOfScore(tns) + +* RageFileManager is now accessible through FILEMAN with these bindings: + * FILEMAN:DoesFileExist(path) + * FILEMAN:GetHashForFile(path) + +* Add bindings to Song: + * GetSongFilePath + * GetMusicPath + * GetCDTitlePath + * GetLyricsPath + * IsEnabled + * HasStepsType + * HasMusic + * HasBanner + * HasBackground + * HasCDTitle + * HasBGChanges + * HasLyrics + * GetBPMAtBeat + * GetBeatFromElapsedTime + * GetElapsedTimeFromBeat + * HasSignificantBpmChangesOrStops + * HasEdits + * IsEasy + +* Add bindings to Steps: + * IsAnEdit + * IsAPlayerEdit + * GetHash + * disabled stub for GetSMNoteData (untested) + +20090612 +-------- +* Work-in-progress bindings for ActorSound: + * pause + * stop +* Work-in-progress bindings for RageSound: + * volume + * SetStopMode + +20090529 +-------- +(sync with SM4SVN: Archer adding 5:4 support) + +20090527 +-------- +Add three new Lua bindings to RageFile: +* GetError +* ClearError +* AtEOF + +20090525 +-------- +(sync with SM4SVN) +* [Actor.cpp] add GetDiffuse() Lua binding + +20090523 +-------- +* Add glowramp to Actor + +20090518 +-------- +* (changes from SM4SVN: Frieza and Wolfman [OnlyPreferredDifficulties]) + +20090517 +-------- +* New RageFile bindings: Seek, Tell +* Added more internal font mappings: auxa, auxb, auxy, auxl, auxr + +20090513 +-------- +ActorScroller changes: +* Can now actually set size of the mask with SetMask +* Add more Lua bindings: + * SetNumItemsToDraw + * GetFullScrollLengthSeconds + * GetCurrentItem + * GetDestinationItem + +20090509 +-------- +* Add skewy to valid Actor commands. + +20090505 +-------- +(SM4SVN: ComboMultiplier by Frieza in ScoreKeeperNormal + r28060, r28061) + +20090502 +-------- +(changes from SM4SVN: ScreenSelect* changes by Frieza) +* Make ScreenDebugOverlay use its own fonts, namely: + * ScreenDebugOverlay header + * ScreenDebugOverlay page + * ScreenDebugOverlay line +* Add GetServerName() binding to NetworkSyncManager. +* Add GetText() binding to BPMDisplay. +* add MD5 String/File and SHA1 String hashing via Lua: + * CRYPTMAN:MD5String(str) + * CRYPTMAN:MD5File(path) + * CRYPTMAN:SHA1String(str) +* Add more Lua bindings to PlayerStageStats: + * GetCurrentMissCombo + * GetCurrentPossibleDancePoints + * GetAliveSeconds +* Add GetThemeAuthor() to ThemeManager. +* Add bindings to Song: + * GetDisplaySubTitle + * GetTranslitSubTitle + +20090501 +-------- +(changes from SM4SVN: tons of changes by Frieza) + +20090425 +-------- +(changes from SM4SVN: GameManager.cpp, RollingNumbers.cpp) + +20090419 +-------- +* Make some crash explanations more detailed. Changed files include: + * Actor.cpp - PercentThroughEffect, PercentBetweenColors, DeltaTime + * Attack.cpp + * GameManager.cpp + * GameState.cpp + * InputFilter.cpp + * NoteData.cpp +* Add new Lua bindings to TimingData: HasBpmChanges, GetBpms, GetStops. + +20090418 +-------- +* Project begins. +* Remove ScreenEz2SelectPlayer, which only the Xbox project still referenced. +_____________________________________________________________________________ \ No newline at end of file diff --git a/Docs/CodingStyle.txt b/Docs/CodingStyle.txt new file mode 100644 index 0000000000..93688c401d --- /dev/null +++ b/Docs/CodingStyle.txt @@ -0,0 +1,47 @@ +sm-ssc Code Style Guidelines +-------------------------------------------------------------------------------- +AJ is biased, but prefers to edit text in SciTE and just uses Visual Studio when +necessary. "It's really slow!" + +That being said, the sm-ssc code style guidelines are as follows: + +1) Follow the current coding conventions set forth in the source code. +This means use tabs. AJ prefers tabs have a width of 4. Visual Studio and web +browsers assume tabs to be 8 by default. :/ +Use of the tab character means you can define however the fuck wide you want it +to be. + +Use of the space character is allowed for complex alignment. There are many +examples of this in the code. + +If it can be done in one line, do so: +int xTwenty(int factor){ return factor*20; } + +Otherwise, follow what's in the code, namely... + +for single line ifs : +if( somecrap ) + dosomethingelse(); + +for multi-lines: +if( anothercrap ) +{ + omg(); + lotsofstuff(); +} + +Naming conventions seem to be Hungarian (of Apps or System, I do not know). + +2) Remove any unnecessary whitespace. "Unnecessary" whitespace includes tabs +at the end of } characters, tabs that lead nowhere, like this one: + +and keep in mind that this can be done with spaces too: + +so watch yourself. Remove 'em all. + +3) When making LOG->Trace()s in code, it's best to include the name of the Class +and Function in [], like so: +LOG->Info( "[NetworkSyncManager::Listen] Initializing socket..." ); +You may not always need to do this, but it helps for clarity and sanity. + +4) There are no other rules (yet). \ No newline at end of file diff --git a/Docs/CommandLineArgs.txt b/Docs/CommandLineArgs.txt new file mode 100644 index 0000000000..8137d104e7 --- /dev/null +++ b/Docs/CommandLineArgs.txt @@ -0,0 +1,61 @@ +sm-ssc Command Line Arguments +================================================================================ +Pass all arguments with --. For example, version would be entered as --version. +stepmania --version + +Passing package files to StepMania on the command line will install them: +stepmania moonlight.smzip +================================================================================ +[GameState] +* player +usage: --player=1 +Joins in the specified player. Can also pass --player=2 at the same time, +if desired. However, sm-ssc does not support more than two players, so don't +go past 2. + +* mode +usage: --mode= +Applys a GameCommand to all players if valid. +-------------------------------------------------------------------------------- +[NetworkSyncManager] +* netip +usage: --netip=localhost +Connects to a server for online play. + +* listen +usage: --listen +Sets up a server, waiting for someone to connect. StepMania cannot connect to +itself, so it's unknown what this option is really for. This option may be +removed in future sm-ssc releases if it is deemed pointless. +-------------------------------------------------------------------------------- +[PrefsManager] +* Type +usage: --Type=arcade +Reads preferences from [Preferences-{Type}], usually from the metrics. +-------------------------------------------------------------------------------- +[StepMania] +* ExportNsisStrings +usage: --ExportNsisStrings +Exports strings for the installer. + +* ExportLuaInformation +usage: --ExportLuaInformation +Exports Lua.xml using the default theme (and anything it falls back on) +for reference. + +* theme +usage: --theme=default | --theme="theme with spaces" +Sets the current theme. + +* language +usage: --language=en +Sets the current language. + +* version +usage: --version +Displays version information. +-------------------------------------------------------------------------------- +[ThemeManager] +* metric +usage: --metric=(element)::(metric)=(value) +Sets [Element] Metric=Value in the metrics. Can be used multiple times. \ No newline at end of file diff --git a/Docs/CompileFlags.txt b/Docs/CompileFlags.txt new file mode 100644 index 0000000000..63679968e3 --- /dev/null +++ b/Docs/CompileFlags.txt @@ -0,0 +1,17 @@ +sm-ssc has a few compile flags that are helpful to know, as well as ones +inherited from StepMania. +================================================================================ +stepmania: +================================================================================ +WITHOUT_NETWORKING +Disables all networking stuff (SMO). +================================================================================ +sm-ssc: +================================================================================ +SSC_FUTURES +{todo} +-------------------------------------------------------------------------------- +HAVE_VERSION_INFO +If this isn't defined, passing in --version will only show the name of the +current sm-ssc version, no build number or date. +Please define HAVE_VERSION_INFO if you can when building sm-ssc. \ No newline at end of file diff --git a/Docs/ConditionalBGA Info.txt b/Docs/ConditionalBGA Info.txt deleted file mode 100644 index d1b6bd687d..0000000000 --- a/Docs/ConditionalBGA Info.txt +++ /dev/null @@ -1,194 +0,0 @@ -******************************** -Conditional BGA System. -******************************** - --------------- -Description --------------- -The conditional bga system will search for a .ini file in a theme -folder which will contain a series of BGA names and conditions upon -which they may be shown. - --------------- -Filenames --------------- -Currently the following .ini names possible are: - -ScreenEvaluation* ConditionalBGA.ini (will appear on the evaluation screen backgrounds) - - --------------- -Structure --------------- -[BGAName To Load] -Conditiontype:Condition - --------------- -Conditions --------------- - -SongTitle: -enter the name of a song title. be aware -- if you have multiples of a song with the -same name then you may want to enter more information like the artist and even song -foot ratings. - -Example- -SongTitle:Paranoia Survivor Max -this will show the BGA only if PSM is available. - - - -SongArtist: -enter the name of an artist, any song which matches the artist name will display the bga. - -Example- -SongArtist:Naoki -all songs where the artist is Naoki will show the BGA - - - -Clear: -clear will show the bga under one of four conditions: -* true - this will show if the song was cleared -* false - this will show if the song was failed -* fullcombo - this will show if the song was full comboed -* brokencombo - this will show if the song was cleared but not fullcomboed - -Example- -Clear:fullcombo -this will only show if one of the players fullcomboed the song. - - - -ModDisallow: -moddisallow will ensure that the bga is NOT displayed if any of the players -have the option. At the time of writing (11/feb/2004) not all mods have been -supported, but certainly things like little are not available (ideal if you -want somebody to get a rewarding bga for clearing a hard song in heavy, but dont -want them getting it via using a mod like little). -You may specify multiple mods by seperating them with commas (,) - -Example- -ModDisallow:little,nojumps,noholds -the bga will only show provided little, nojumps and noholds are not selected by any -player. - - - -Grade: -grade will compare a players grade with their current grade if they have one -so you could have it display a BGA if a player AAA'd a track. You may seperate -grades via commas (,) which will indicate a grade history with the latest stage -being at the end of the list. - -Example- -Grade:AAA,AAA,AAA -the above will show the bga only if the player has passed at least 3 stages and -one of the players got a AAA on each stage. - - - - -SongMonth: -the bga will only display if the current month matches. Months range from 0-11 with -0 being janurary and 11 being december. - -Example- -SongMonth:2 -the bga will only appear if its march. - - - - -SongDay: -the bga will only appear on a day in the month - -Example- -SongDay:10 -the bga only appears if it is the 10th day in the month. - - - -Style: -the bga will only appear if the specified style is available. you can specify multiple -style by seperating them with commas (,) - -Example- -Style:double,single -this will display the BGA only if the style is in double or single. - - - - -SongRating: -the bga will only show if one of the players is in a difficulty matching that specified -you may specify multiple ratings by seperating them with a comma (,) - -Example- -SongRating:heavy,light -this will show the bga only if a player played heavy or light notes. - - - -SongDifficulty: -if a player was playing a song with a footrating specified then the bg will display -you can seperate difficulties with commas (,) you can specify ranges like the following: -1-3 this is the same as writing 1,2,3 also you may check for ratings and greater for -example: 9+ will check for all catastrophic songs. - -Example- -SongDifficulty:SongDifficulty:1-3,5,9+ -this will show the bga if the songs difficulty is 1,2,3,5,9(and onwards) - - ------------------- -Overriding ------------------- -If there are several bga's listed in a file, and the conditons specified are met -for more than one bga, the one listed nearest to the end of the file will have priority. - ------------------- -Mixing Conditions ------------------- -All conditions are mixable, for instance you may check if a song is in Expert AND if its -title is G2. - ------------------ -Examples ------------------ - -//AAA three tracks in a row (your 3rd evaluation screen will have this) -[ScreenEvaluationStage AAA3] -Grade:AAA,AAA,AAA - -// clear G2 in maniac -[ScreenEvaluationStage G2] -SongTitle:g2 -SongRating:Heavy -Clear:true -ModDisallow:little,nojumps,noholds - -// full combo sweet in heavy on the 15th march -[ScreenEvaluationStage 1503] -SongTitle:sweet -SongArtist:dj evil -SongRating:Heavy -SongDay:15 -SongMonth:2 // months range from 0 - 11 -Clear:maxcombo - ------------------ -Version History ------------------ -11/feb/2004 -Initial Version, Support for SongTitle,SongArtist,SongRating, -SongDay,SongMonth,Clear,Grade,ModDisallow,Style and SongDifficulty. - ------------- -Contact ------------- -This feature was initially created by: -frieza [letters_q (at) hotmail.com] - -and is maintained by: -frieza [letters_q (at) hotmail.com] \ No newline at end of file diff --git a/Docs/Copying.MAD b/Docs/Copying.MAD index d60c31a97a..fbdd65f6f8 100644 --- a/Docs/Copying.MAD +++ b/Docs/Copying.MAD @@ -1,340 +1,340 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Docs/CustomMissionReference.txt b/Docs/CustomMissionReference.txt new file mode 100644 index 0000000000..c06003a17f --- /dev/null +++ b/Docs/CustomMissionReference.txt @@ -0,0 +1,36 @@ +Mission Mode Specifications/Draft + +-- #TITLE:; self explanitory +#TITLE:; +-- #METER:; defines the meter that shows up in StepsDisplay's. +#METER:; +-- #BANNER:; is a great thing to add because it makes sense in the long run. +#BANNER:; +-- #STYLE:; restricts playmodes ala Pump Pro. +#STYLE:; +-- #MISSIONREF:; is a complete LuaReference that has a params table passed +-- into the function, and is required to pass either: +-- A: A true / false parameter for MISSION CLEARED / FAILED +-- B: A seperate grade tier for missions, complimenting the default grade + score. +-- C: A replacement grade tier for missions, requesting an enum for + the grade to be set. +#MISSIONREF:; + +#SONG:; + +--[[ Example ]] +#TITLE:Test Mission; +#METER:9; +#BANNER:TestMission.png; +#STYLE:Single,Versus; +#MISSIONREF:function(self,params) + local tPlayerStats = params.PlayerStageStats; + + if tPlayerStats.GetTapNoteScores('TapNoteScore_W2') > 0 then + return 'Grade_Failed' + else + return 'Grade_Tier01' + end +end; +#SONG:In The Groove 2/Determinator:Medium:2x,Hidden; diff --git a/Docs/GoldenRules.txt b/Docs/GoldenRules.txt new file mode 100644 index 0000000000..ff49f87578 --- /dev/null +++ b/Docs/GoldenRules.txt @@ -0,0 +1,23 @@ +The Golden Rules of sm-ssc Development +-------------------------------------------------------------------------------- +In addition to CodingStyle.txt, this is the doctrine for operation of sm-ssc. + +1) Always remember that the original branch of StepMania exists, and that we need +to give back to it in order for sm-ssc to survive. +(Literal: Be sure to commit useful changes/fixes to the mainline StepMania branch +every so often.) + +2) If you want something done, you should probably work on it yourself. However, +SSC members should be willing to help if their area of expertise and the problem +domain overlap (life permitting). + +3) Always know your priorities. sm-ssc is important, but it's not life itself. +Take breaks every once in a while. Work on other things. Don't get burned out +from nonstop sm-ssc development. + +4) Patches should be checked for compatibility/compilability before being +accepted and integrated. Common sense, but a golden rule nevertheless. + +5) Anyone who decides to theme for sm-ssc during development is willing to +accept that occasionally, changes to the default and/or fallback theme will +break things. \ No newline at end of file diff --git a/Docs/Licenses.txt b/Docs/Licenses.txt index 1f617abf82..4df820042c 100644 --- a/Docs/Licenses.txt +++ b/Docs/Licenses.txt @@ -1,142 +1,170 @@ -The following license applies to most of the StepMania codebase: - -****************************************************************************** - -StepMania is (c) Chris Danford, the StepMania development team, et al. -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, and/or sell copies of the Software, and to permit persons to -whom the Software is furnished to do so, provided that the above -copyright notice(s) and this permission notice appear in all copies of -the Software and that both the above copyright notice(s) and this -permission notice appear in supporting documentation. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT -OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -****************************************************************************** - -RageSurface_Load_GIF contains code from Xpaint under the following license: - - Copyright 1990, 1991, 1993 David Koblas. - Copyright 1996 Torsten Martinsen. - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that copyright notice and this permission - notice appear in supporting documentation. This software is - provided "as is" without express or implied warranty. - -****************************************************************************** - -Code in src/crypto/ is under the following permissive license: - -PuTTY is copyright 1997-2001 Simon Tatham. - -Portions copyright Robert de Bath, Joris van Rantwijk, Delian -Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, -Justin Bradford, and CORE SDI S.A. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation files -(the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -****************************************************************************** - -Code in RageSurfaceUtilsPalettize.cpp is under the following permissive -license: - -Copyright (C) 1989, 1991 by Jef Poskanzer. -Copyright (C) 1997, 2000, 2002 by Greg Roelofs; based on an idea by - Stefan Schneider. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. This software is provided "as is" without express or -implied warranty. - -****************************************************************************** - -PCRE is distributed under the 3-clause BSD license: - -Written by: Philip Hazel - -Copyright (c) 1997-2003 University of Cambridge -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -****************************************************************************** - -The MAD library (included with most Windows binary distributions), and -interface code in RageSoundReader_MP3, is under the GPL, available in -Copying.MAD. Support for this library can be disabled at compile-time. - -****************************************************************************** - -NotesLoaderMidi contains code from STK under the following license: - -Copyright 2003 Gary P. Scavone - -LEGAL AND ETHICAL: - -This software was designed and created to be made publicly available for -free, primarily for academic purposes, so if you use it, pass it on with -this documentation, and for free. - -On April 19 2007, StepMania was granted an MIT license by Gary Scavone -for any STK code on the condition that all of the the STK -credits/disclaimers/copyrights from the README are retained in the -source code and in the project documentation. +The following license applies to most of the sm-ssc additions: + +sm-ssc is copyright AJ Kelly, Midiman, shakesoda (referred to as +"the spinal shark collective" hereafter), and other contributors. +All rights reserved. + +"sm-ssc" is defined as the changes made to StepMania that do not make their +way back into the main StepMania repository for various reasons. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT +OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +The rest of the codebase is then licensed as follows: +****************************************************************************** + +StepMania is (c) Chris Danford, the StepMania development team, et al. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT +OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +****************************************************************************** + +RageSurface_Load_GIF contains code from Xpaint under the following license: + + Copyright 1990, 1991, 1993 David Koblas. + Copyright 1996 Torsten Martinsen. + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation. This software is + provided "as is" without express or implied warranty. + +****************************************************************************** + +Code in src/crypto/ is under the following permissive license: + +PuTTY is copyright 1997-2001 Simon Tatham. + +Portions copyright Robert de Bath, Joris van Rantwijk, Delian +Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, +Justin Bradford, and CORE SDI S.A. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************************************************** + +Code in RageSurfaceUtilsPalettize.cpp is under the following permissive +license: + +Copyright (C) 1989, 1991 by Jef Poskanzer. +Copyright (C) 1997, 2000, 2002 by Greg Roelofs; based on an idea by + Stefan Schneider. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. + +****************************************************************************** + +PCRE is distributed under the 3-clause BSD license: + +Written by: Philip Hazel + +Copyright (c) 1997-2003 University of Cambridge +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +****************************************************************************** + +The MAD library (included with most Windows binary distributions), and +interface code in RageSoundReader_MP3, is under the GPL, available in +Copying.MAD. Support for this library can be disabled at compile-time. + +****************************************************************************** + +NotesLoaderMidi contains code from STK under the following license: + +Copyright 2003 Gary P. Scavone + +LEGAL AND ETHICAL: + +This software was designed and created to be made publicly available for +free, primarily for academic purposes, so if you use it, pass it on with +this documentation, and for free. + +On April 19 2007, StepMania was granted an MIT license by Gary Scavone +for any STK code on the condition that all of the the STK +credits/disclaimers/copyrights from the README are retained in the +source code and in the project documentation. diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml new file mode 100644 index 0000000000..8a6e034b73 --- /dev/null +++ b/Docs/Luadoc/Lua.xml @@ -0,0 +1,1765 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sm-ssc private beta 1.4 + 2010-01-25 + diff --git a/Docs/Lua.xsd b/Docs/Luadoc/Lua.xsd similarity index 93% rename from Docs/Lua.xsd rename to Docs/Luadoc/Lua.xsd index ac5f6dc424..a4103c434e 100644 --- a/Docs/Lua.xsd +++ b/Docs/Luadoc/Lua.xsd @@ -1,185 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Docs/Lua.xsl b/Docs/Luadoc/Lua.xsl similarity index 79% rename from Docs/Lua.xsl rename to Docs/Luadoc/Lua.xsl index 54a2ee694a..e2a0ba1455 100644 --- a/Docs/Lua.xsl +++ b/Docs/Luadoc/Lua.xsl @@ -1,569 +1,655 @@ - - - - - - - -This file is automatically generated. Do not edit it. - - - StepMania LUA Information - - - - - - - - - - - -
-

StepMania LUA Information

- - - - - - - - - -
SingletonsClassesNamespacesGlobal FunctionsEnumsConstants
-
- - - - - - -
- - -
- - - -
-

Singletons

- -
-
- - - -
-

Classes

- - - -
-
- - -
-

Namespaces

- - - -
-
- - - - - -
- - - Class - - - - : - - - - - -
-
- - - -
- - - Namespace - - - -
-
- - -
-

Global Functions

- - - - - - - -
Functions
-
-
- - - - - - { - - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ... - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - - - ) - -

- - - -

- -
- - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - () - - - -
-

Enums

- - - -
-
- - - - -
- - - Enum - - -
-
- - - -

- - - -

-
- - -
-

Constants

- - - - - - - - - - - - -
ConstantValue
-
-
-
- - - - - - - - - - -
-
- + + + + + + + +This file is automatically generated. Do not edit it. + + + sm-ssc Lua Information + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
Sections
SingletonsClassesNamespacesGlobal FunctionsEnumsConstants
+
+
+
+ Function Colors +
Available in SM4 baseline and sm-ssc
+
Renamed or otherwise modified in sm-ssc (differences will be noted)
+
Available in sm-ssc only (for the time being)
+
Defined in sm-ssc's _fallback theme (Foundation)
+
Defined in sm-ssc's default theme (Urban Fragments)
+
+
+ + + + + + +
+ + +
+ + + +
+

Singletons

+ +
+
+ + + +
+

Classes

+ + + +
+
+ + +
+

Namespaces

+ + + +
+
+ + + + + +
+ + + Class + + + + : + + + + + +
+
+ + + +
+ + + Namespace + + + +
+
+ + +
+

Global Functions

+ + + + + + + +
Functions
+
+
+ + + + + + { + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ... + + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + renamed + sm-ssc + _fallbackTheme + defaultTheme + descriptionCell + + + + + + + ( + + + + ) + +

+ + + +

+ +
+ + + + + + sm-ssc + descriptionCell + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + () + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + () + + + +
+

Enums

+ + + +
+
+ + + + +
+ + + Enum + + +
+
+ + + +

+ + + +

+
+ + +
+

Constants

+ + + + + + + + + + + + +
ConstantValue
+ + +
+
+
+
+ + + + + + + + + + +
+
+ diff --git a/Docs/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml similarity index 78% rename from Docs/LuaDocumentation.xml rename to Docs/Luadoc/LuaDocumentation.xml index 43e722a992..dd15021700 100644 --- a/Docs/LuaDocumentation.xml +++ b/Docs/Luadoc/LuaDocumentation.xml @@ -1,2243 +1,2665 @@ - - - - - - - - - - - - Returns the base name of file path. - - - Returns a color from a string. color can be in - hex ("#FFFFFFFF") or 0..1 values ("1.0,1.0,1.0,1.0"), - in RGBA order. - - - Tries to connect to the server at sAddress. - - - Returns the current day of the month. - - - Returns the current day of the year. - - - Returns the number passed to the function followed by its suffix ("th", "nd", and so on). - - - Returns fPercentDancePoints formatted as a percentage. - - - Returns a corresponding for the given percentage. - - - Returns the current Life Difficulty. - - - Returns the theme's aspect ratio. - - - Returns the current hour. - - - Returns true if Event Mode is turned on. - - - Returns true if connected to the Internet. - - - Returns true if connected to StepMania Online. - - - Returns true if Player pn is logged on to - a SMOnline server. - - - Returns an Actor definition for the actor at sPath. If sPath points to a Lua file, any additional arguments will be passed to that script. - - - Returns the current Minute. - - - Returns the current month of the year. - - - Returns Month m as a localized string. - - - Returns Month m as a string. - - - Returns the current second. - - - Converts fSecs to Minutes:Seconds.Milliseconds format. - - - Alias for . - - - Alias for . - - - Returns the current year. - - - Returns the length of the multi-byte character string sString. - - - - - - - - Returns true if sClassName is a registered Class. - - - - - Enumerated types are lookup tables associating a string to each numerical - value for each Enum. For example, - [1] would be the - string 'PlayerNumber_P1'.
- The functions defined in the Enum namespace are valid member - functions of every Enum where the first argument is - omitted and the name of the Enum is used in place - of Enum. Instead of - Enum.GetName( - ) or - Enum.Reverse( - ), one can use - :GetName() or - :Reverse(), respectively. -
- - Both x and y need to be elements of the enumerated - type e. Returns a value less than/greater than/equal to - 0 corresponding to the numerical value of x being - less than/greater than/equal to the numerical value of y as - determined by - Enum.Reverse( e ). - - - Returns the type of e. For example, - Enum.GetName( ) - will return the string 'PlayerNumber'. - - - Returns a reverse lookup table for the enumerated type e. For - example:
local r = - Enum.Reverse( );
- local n = r['PlayerNumber_P2'];

- The value of n in this case would be 1 corresponding - to the 0-based indexing using in C++ and not 2 as might be - expected for the 1-based indexing used in Lua. -
-
- - - Return the first of the corresponding to game. - - - Return the localized string representation of st. - - - - - Writes sString to log.txt. Aliased by - . - - - Writes sString to info.txt and log.txt as - a warning. Aliased by . - - - Flushes log files to disk. - - - - - Creates a RageFile handle with which one can use the commands in . - - - - - Gets the credits message for Player pn. - - - - - Returns true if the song's steps (st) are playable. - - - Returns true if the song's StepsType (st) are playable. - - - - - Returns the number of songs in a Trail. - - - Returns the Trail's total length in seconds. - - -
- - - - - - Returns the Actor's parent, or nil if it doesn't have one. - - - Returns the Actor's visibility. - - - Returns the Actor's x position. - - - Returns the Actor's y position. - - - Returns the Actor's z position. - - - Returns the Actor's zoom. - - - Returns the Actor's X zoom. - - - Returns the Actor's Y zoom. - - - Returns the Actor's Z zoom. - - - Sets Texture Filtering for an Actor to b. - - - Plays the commands that follow at an accelerated rate (fRate * fRate), where fRate is in seconds. - - - Adds xPos to the Actor's current x position. - - - Adds yPos to the Actor's current y position. - - - Adds zPos to the Actor's current z position. - - - Sets the alignment of an Actor, where h and v are in the range 0..1. - - - Sets whether or not the Actor should animate. - - - - Sets the Actor's aux value. - - - If true, cull the Actor's back faces. See also: . - - - Sets the Actor's base alpha to fAlpha, where fAlpha is in the range 0..1. - - - Sets the Actor's base X rotation to rot. - - - Sets the Actor's base Y rotation to rot. - - - Sets the Actor's base Z rotation to rot. - - - Sets the Actor's base X zoom to zoom. - - - Sets the Actor's base Y zoom to zoom. - - - Sets the Actor to use the specified blend mode. - - - Makes the Actor bob up and down. Can use to define different bobbing behavior. - - - Centers an Actor. - - - Crops percent of the Actor from the bottom where percent is in the range 0..1. - - - Crops percent of the Actor from the left where percent is in the range 0..1. - - - Crops percent of the Actor from the right where percent is in the range 0..1. - - - Crops percent of the Actor from the top where percent is in the range 0..1. - - - Sets the Actor's cull mode to mode. - - - Plays the commands that follow at an decelerated rate (1 - (1-fRate) * (1-fRate)), where fRate is in seconds. - - - Set the Actor's diffuse color to c. - - - Sets the Actor's alpha level to fAlpha, where fAlpha is in the range 0..1. - - - Sets the Actor's bottom edge color to c. - - - Set the Actor's diffuse color to c, ignoring any alpha value in c. - - - Sets the Actor's left edge color to c. - - - Sets the Actor's lower left corner color to c. - - - Sets the Actor's lower right corner color to c. - - - Sets the Actor's right edge color to c. - - - Sets the Actor's top edge color to c. - - - Sets the Actor's upper left corner color to c. - - - Sets the Actor's upper right corner color to c. - - - Sets the Actor's draworder to iOrder, where larger values display first. - - - Set the Actor's effect clock to s. - - - Sets the first effect color to c. - - - Sets the second effect color to c. - - - Set the Actor's effect magnitude in each direction to the given values. - - - Set the Actor's effect offset to fTime. - - - Set the Actor's effect period to fTime. - - - Fades percent of the Actor from the bottom where percent is in the range 0..1. - - - Fades percent of the Actor from the left where percent is in the range 0..1. - - - Fades percent of the Actor from the right where percent is in the range 0..1. - - - Fades percent of the Actor from the top where percent is in the range 0..1. - - - Finishes up an Actor's tween immediately. - - - Stretches an Actor to fill the entire screen. - - - - Returns the Actor's aux value. - - - Returns true if the Actor has a command named sCmdName. - - - Returns the Actor's current diffusealpha. - - - Returns the Actor's name. - - - Returns the number of states the Actor has. - - - Returns the Actor's current height. - - - Returns the Actor's current Y rotation. - - - Returns the Actor's current width. - - - Returns the zoomed height of an Actor. - - - Returns the zoomed width of an Actor. - - - Sets the Actor's glow color. - - - Set the fractional horizontal alignment of the Actor according to fAlign which should be a float in the range 0..1. An alignment of 0 is left aligned while an alignment of 1 is right aligned. See for the common case. - - - Sets an Actor's hidden value to b. Deprecated, use instead. - - - Set the horizontal alignment of the Actor according to align. See for fractional alignment. - - - Hurries up an Actor's tweening by factor. - - - Plays the commands that follow at a normal rate, where fRate is in seconds. - - - Sets the Actor's name to sName. - - - Plays a command named sCommandName. - - - Makes the Actor grow and shrink. Can use to define different pulsing behavior. - - - Queues a command named sCommandName to be played. - - - Makes the Actor change colors continually using colors of the rainbow. - - - Set the Actor's rotation on the X axis to fAlign. - - - Set the Actor's rotation on the Y axis to fAlign. - - - Set the Actor's rotation on the Z axis to fAlign. - - - Scales the Actor to cover a rectangle defined by the four float arguments. - - - Scales the Actor to fit inside a rectangle defined by the four float arguments. - - - Sets a multi-framed Actor's state to iNewState. - - - Sets the shadow's color to c. - - - Sets the Actor's shadow length to fLength. - - - Sets the Actor's horizontal shadow length to fLength. - - - Sets the Actor's vertical shadow length to fLength. - - - Skews the Actor on the x axis by fAmount. - - - Waits fSeconds before executing the next command. - - - Tells the Actor to spin. Can use to define different spinning behavior. - - - Stops any effect the Actor has. - - - Stretches the Actor to a rectangle of a specific size. - - - Set the fractional vertical alignment of the Actor according to fAlign which should be a float in the range 0..1. An alignment of 0 is top aligned while an alignment of 1 is bottom aligned. See for the common case. - - - Set the vertical alignment of the Actor according to align. See for fractional alignment. - - - Makes the Actor vibrate violently. Can use to define different vibration behavior. - - - Sets an Actor's visibility to b. - - - Set the x position of the Actor to xPos. - - - Set the y position of the Actor to yPos. - - - Set the z position of the Actor to zPos. - - - Zooms the Actor to zoom scale. - - - Zooms the Actor on both the X and Y axis using zoomX and zoomY. - - - Zooms the Actor to zoom height. See also: . - - - Zooms the Actor to zoom width. See also: . - - - Zooms the Actor to zoom scale on the X axis. - - - Zooms the Actor to zoom scale on the Y axis. - - - Zooms the Actor to zoom scale on the Z axis. - - - - - Sets the field of view for the ActorFrame. - - - Returns the child with a name of sName. - - - Returns an table of all the children in the ActorFrame. - - - Gets the ActorFrame's Draw function. - - - Returns the number of children in the ActorFrame. - - - Sets if the ActorFrame should draw by Z position. - - - Sets the ActorFrame's Draw function to the specified Lua function. - - - Sets the field of view for the ActorFrame. - - - Sets the ActorFrame's update function to the specified Lua function. - - - Sets the update function's rate to fRate. - - - Tells the ActorFrame to sort by draw order. - - - Sets the vanishing point for the ActorFrame. - - - - - Clears all the textures from the MultiTexture. - - - Sets the EffectMode on the MultiTexture. - - - Sets a TextureMode on the specified index. - - - - - Returns the target of the ActorProxy. - - - Sets the ActorProxy target to a. - - - - - Returns the number of seconds until the scroller reaches its destination. - - - Positions the scroller items. - - - Scrolls through all the items in the scroller. - - - Scrolls through all the items in the scroller with padding at the beginning and end. - - - Sets the item the scroller should scroll to next and makes it the current item. - - - Sets the item the scroller should scroll to next. - - - Sets if the scroller should catch up fast. - - - Specifies if the scroller should loop or not. - - - Sets the scroller's mask to a Quad that is fWidth by fHeight pixels. - - - Sets the number of subdivisions in the scroller. - - - Sets the scroller's pause countdown to fSecs. - - - Sets the scroller's pause between items to fSeconds. - - - Sets how many seconds the scroller should spend on each item.
- A value of 0 means the scroller will not scroll. -
- - Sets the scroller's transform function to the specified Lua function. - - - Sets the scroller's transform function from fItemHeight. - - - Sets the scroller's transform function from fItemWidth. - -
- - - This Actor represents a playable sound. There are two attributes that can be set on load.
- * SupportPan - Let the sound pan from side to side.
- * SupportRateChanging - Let the sound change rate and pitch. -
- - Returns the that can be played by this Actor. - - - Loads the sound at sPath. - - - Play the sound. - - - Play the sound on the given player's side. You must set SupportPan = true on load. - -
- - - Loads the background from an UnlockEntry. - - - Loads the banner from an UnlockEntry. - - - Loads the card image from the specified Character. - - - - - - Loads a Banner from a specified Course. - - - Loads a Banner from a specified Song. - - - Loads a Banner from a specified Song Group. - - - Loads an icon from the specified Character. - - - See . - - - See . - - - - - Add the attribute attr to the string at position - iPos.
- The attribute is a table that must contain Length - which specifies how many (multi-byte) characters the attribute - is to apply. If Length=-1, then the attribute applies - until another attribute overrides it.
- If the table contains Diffuse, then the color value - is applied to the range of text.
- If the table contains Diffuses, then it should be - an array of 4 colors which specify the diffuse color for the - top left, top right, bottom left, and bottom right.
- If the table contains Glow, then the color value - is applied as a glow to the range of text.
- Example:
- attr = { Length = 10; Diffuse = color("#AABBCC"); } -
- - Clear all attributes associated with the BitmapText. - - - Returns the text that is currently set. - - - If bJitter is true, move each character of the string around by a small random amount. - - - Set the maximum height of the unzoomed text to fHeight. If fHeight is 0, then there is no maximum height. - - - Set the maximum width of the unzoomed text to fWidth. If fWidth is 0, then there is no maximum width. - - - If true, set each character of the text in turn to the rainbow colors in the metrics BitmapText::RainbowColor#. - - - Set the text to sText. This clears all attributes. - - - Sets the stroke color to c. - - - If true, make all text uppercase. - - - Add iSpacing pixels of padding between lines of text. - - - Wrap the unzoomed text at iWidth pixels. If you or by x and you want the text wrapped at width, then you should use wrapwidthpixels(width/x). - -
- - - Sets the BPMDisplay from the GameState. - - - - - Loads the ComboGraph commands from the Metrics in group sMetricsGroup. - - - Sets the values of the ComboGraph using the specified StageStats and PlayerStageStats. - - - - - Loads the ControllerStateDisplay from the specified GameController. - - - Loads the ControllerStateDisplay from the specified MultiPlayer. - - - - - Returns a table of all the Trails in the Course. - - - Returns the path to the Course's banner. - - - Gets the CourseEntry at iIndex from the Course. - - - Returns the Course's . - - - Returns the full display title of the Course. - - - Returns the estimated number of stages for the Course. - - - Returns the goal seconds for the Course. - - - Returns the Course's group name. - - - Returns the Course's . - - - Returns the total length of the Course in seconds. - - - Returns the full transliterated title of the Course. - - - Returns true if the Course has modifiers. - - - Returns true if the Course has timed modifiers. - - - Returns true if the Course was automatically generated. - - - Returns true if the Course is Endless. - - - - - Sets the CourseContentsList from the GameState. - - - - - Returns the Song that this CourseEntry corresponds to. - - - - - Returns the path to the character's card graphic. - - - Returns the path to the character's icon. - - - Returns the path to the character's ScreenSelectMode icon. - - - Returns the path to the character's ScreenStage icon. - - - - - Return the corresponding to sID. - - - - - Sets the DifficultyIcon's state from the difficulty passed in. - - - Sets the DifficultyIcon's Player to pn, - then sets the DifficultyIcon's state from the difficulty of Steps pSteps - - - Sets the DifficultyIcon's Player to pn, - then sets the DifficultyIcon's state from the difficulty of Trail pTrail - - - Sets the DifficultyIcon's Player to pn. - - - Blanks the DifficultyIcon. - - - - - Sets the StepsDisplayList from the GameState. - - - - - Returns the name of the game such as "dance" or "pump". - - - - - Returns the index of this item. - - - Returns any MultiPlayer that may have been set. - - - Returns the choice name. - - - Returns any Profile ID that may have been set. - - - Returns any Song that may have been set. - - - Returns the name of any song group that may have been set. - - - Returns any Style that may have been set. - - - Returns the display text. - - - - - Returns the first StepsType for the specified Game. - - - Returns a localized string for the specified StepsType. - - - - - Set the music volume to fVolume for fDuration seconds. - - - - Return the sound balance for pn. - - - Play the sound at sPath one time. - - - - - Returns true if any player has performed a feat worthy of ranking. - - - The second argument is optional. Apply the GameCommand represented by sCommand - for pn, if given. See . - - - Returns true if enough credits have been inserted to join. - - - Returns the environment table. See . - - - Returns the current . - - - Return the number of inserted but unused coins. This number is - decremented when players join. - - - Return the number of coins needed to join based on the current coin and premium modes - as well as the number of people joined, if that matters for the premium mode. See - and . - - - The s in a are numbered sequentially - starting from 0. Return the number of the current . - - - Return the current . - - - Return the current . - - - Return the current . - - - Return the current . - - - Return the current for the specified Player. - - - Return a variable number of arguments based on the being - played by all players. For each distinct being played by - the players, in increasing order, - the difficulty and description of the is returned as strings. -
For example,
- local credits = {GAMESTATE:GetCurrentStepsCredits()};
- will make a table of the difficulties and descriptions. -
- - Return the current . - - - Return the current for the specified player. - - - Return a string representation of the default song options. - - - Return the easiest of the - currently selected steps by all players. For example, if player 1 has - selected Hard steps and player 2 has selected Medium steps, Medium will - be returned. - - - - - - - Return the Edit Local or nil if - it does not exist. - - - - - - Return the source for the editor or nil - if it does not exist. - - - Returns true if a freeze/stop is active in the song. - - - Return the random seed for the game. - - - Return true if the gameplay lead in is enabled. If - false, gameplay begins immediately. - - - Returns an array of s corresponding to Human players. - - - Returns the master player number. - - - Returns true if the game is Multiplayer. - - - Returns the number of players enabled. - - - Returns the number of sides joined. - - - Returns the number of stages for the current Song and its Steps or the current Course. - - - Returns the number of stages left for player pn. - - - Returns the display name for player pn. - - - Returns the PlayerState for player pn. - - - Returns the current PlayMode. - - - Returns the preferred difficulty. - - - Returns the preferred song. - - - Returns the preferred song group. - - - Returns the current Premium. - - - - Returns the current beat of the song. - - - Returns the current visible beat of the song. - - - Returns the song's current beats per second. - - - Returns true if the song is currently in a freeze. - - - Returns the song options as a string. - - - Returns the current SortOrder. - - - Returns the current stage index. - - - Return the random seed for the current stage. - - - Returns true if the workout goal is complete. - - - Returns true if an extra stage was earned. - - - Returns true if this is an extra stage. - - - Returns true if any human player is using a memory card. - - - Returns true if playing in a Course mode. - - - Returns true if in Demonstration mode. - - - Returns true if the match was a draw. - - - Returns true if Event Mode is on, temporary or otherwise. - - - Returns true if this is the first extra stage. - - - Returns true if this is the second extra stage. - - - Returns true if player pn has completed the current Goal. - - - Returns true if player pn is human. - - - Returns true if player pn is enabled. - - - Returns true if player pn has joined the game. - - - Returns true if player pn is the winner. - - - Returns true if player pn is using modifier sModifier. - - - Returns true if players can join the game. - - - Resets the GameState. - - - Saves the bookkeeping and machine profile data. - - - Sets the current Course to course. - - - Sets the current Song to song. - - - Sets the current Steps of Player pn to steps. - - - Sets the current Trail to trail. - - - Sets if the Jukebox should use modifiers. - - - Sets the number of multiplayer notefields to iFields - - - Sets the preferred difficulty of Player pn to Difficulty dc. - - - Sets the preferred Song to song. - - - Sets the preferred song group to sGroup. - - - Sets the Song Options from so using ModsLevel m. - - - Turns temporary Event Mode on or off, depending on bOn. - - - Determines if Judgment W1 should be shown based on bOn. - -
- - - Loads the GradeDisplay commands from the Metrics in group sMetricsGroup. - - - Sets the GradeDisplay to show Grade g. - - - - - Loads the GraphDisplay commands from the Metrics in group sMetricsGroup. - - - Sets the values of the GraphDisplay using the specified StageStats and PlayerStageStats. - - - - - Sets the GrooveRadar values for Player pn to empty. - - - Sets the GrooveRadar values for Player pn from RadarValues rv - - - Tweens the GrooveRadar off screen. - - - Tweens the GrooveRadar on screen. - - - - - Returns two tables representing the tips and alternate tips in the HelpDisplay. - - - Sets the seconds between switches of tips to fSeconds. - - - Sets the HelpDisplay's tips using tips (and optionally altTips). - - - Sets the HelpDisplay's text from sTips using colons to separate new sections. - - - - - Returns the date and time the high score was achieved. - - - Returns the name associated with the high score. - - - Returns the percentage of dance points associated with the high score. - - - Returns the score associated with the high score. - - - Returns the number of seconds survived associated with the high score. - - - - - You can get a HighScoreList using . - - - Returns a table of the high scores. - - - - - Returns the amount of life left in the LifeMeter as a float in the range 0..1. - - - Returns true if failing. - - - Returns true if the LifeMeter is "hot". - - - Returns true if in danger. - - - - - Return the state for player pn. - - - - - Pauses the MenuTimer, stopping it from counting down. - - - Sets the MenuTimer's value to fSeconds. - - - Sets the MenuTimer's silent setting to bSilent. - - - Sets the MenuTimer's stealth setting to bStealth. If - true, the timer will be invisible and silent. - - - Stops the MenuTimer by setting it to 0 and pausing. - - - - - Broadcast the message to all listeners subscribed to sMessage. The - second argument is an optional table of parameters. It may be omitted or explicitly - set to nil. - - - - - Controls if the model should loop or not. - - - Plays animation sAniName at fPlayRate speed (default 1.0). - - - Sets how far into the animation the model is. - - - Sets the current animation's playback rate to fRate. - - - Sets the model's default animation to sAnimation at fPlayRate speed (default 1.0). - - - - - Loads the ModIconRow of Player pn from the Metrics in group sMetricsGroup. - - - - - Returns a command from the specified element and value. - - - Returns a bool from the specified element and value. - - - Returns a float from the specified element and value. - - - Returns a integer from the specified element and value. - - - Returns the path for the specified sButton sElement. - - - Returns the actor for the specified sButton sElement. - - - - - Sets the PaneDisplay from the GameState. - - - - - Sets the PaneDisplay from the specified PlayerState and PlayerStageStats. - - - - - Returns the of player pn. - - - - - Returns true if a full combo (TNS_W3 and up) was obtained. - - - Returns the number of Dance Points obtained by the player. - - - Returns the number of calories burned. - - - Returns the player's current combo. - - - Returns the player's current life from 0..1. - - - Returns the player's current score multiplier. - - - Returns the player's grade. - - - Returns the number of judgments for a specified HoldNoteScore. - - - Returns the player's actual score on the lesson. - - - Returns the score needed to pass the lesson. - - - Returns the player's life remaining seconds. - - - Returns the machine high score index for this performance. - - - Returns the peak combo award for this performance. - - - Returns the personal high score index for this performance. - - - Returns a table of played steps. - - - Returns the player's Dance Point percentage. - - - Returns the number of possible Dance Points. - - - Returns a table of possible steps. - - - Returns the score. - - - Returns the stage award for this performance. - - - Returns how long the player survived in seconds. - - - Returns the number of judgments for a specified TapNoteScore. - - - Returns the max combo for this performance. - - - Returns true if the player was disqualified from ranking. - - - - - Returns the player number for this PlayerState. - - - Sets the player options to sPlayerOptions for the specified ModsLevel. - - - Returns a string of player options for the specified ModsLevel. - - - - - Return the value of the preference sPreference. - - - Set the value of the preference sPreference to value. - - - Reset preference sPreference to the default value. - - - - - Returns the number of calories burned during the current day. - - - Returns the Character being used by this profile. - - - Returns a composite of your high scores over courses with the specified StepsType and Difficulty. - - - Returns the percentage of courses that you've completed with the specified StepsType and Difficulty. - - - Returns the possible score of courses with the specified StepsType and Difficulty. - - - Returns the profile's display name. - - - Return the number of calories burned as a string. - - - Returns the number of calories needed to reach the goal. - - - Returns the number of seconds needed to reach the goal. - - - Returns the current goal type. - - - Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t) - - - Returns the number of Toasties gotten using the specified profile. - - - Returns the profile's most popular course. - - - Returns the profile's most popular song. - - - Returns the total number of songs played with the profile. - - - Returns the number of times song s has been played with the profile. - - - Returns a composite of your high scores over songs with the specified StepsType and Difficulty. - - - Returns the percent complete for all songs and courses for the specified StepsType st. - - - Returns the percentage of songs that you've completed with the specified StepsType and Difficulty. - - - Returns the possible score of songs with the specified StepsType and Difficulty. - - - Return the total number of calories burned. - - - Returns the number of Hands stepped on. - - - Returns the number of successful Holds. - - - Returns the number of Jumps stepped on. - - - Returns the number of Mines stepped on. - - - Returns the total number of songs played with the profile. - - - Returns the number of successful Rolls. - - - Returns the number of steps with the specified StepsType and Difficulty that you've scored a certain Grade g on. - - - Returns the number of Taps and successful Holds. - - - Returns the number of trails with the specified StepsType and Difficulty that you've scored a certain Grade g on. - - - Returns how much the player weighs. - - - Returns true if the player has passed any steps in the specified Song s. - - - Returns true if the specified code sUnlockEntryID is unlocked. - - - Sets the goal to iCals calories. - - - Sets the goal to iSecs seconds. - - - Sets the current goal type to gt. - - - Sets how much the player weighs (in pounds) to weightPounds. - - - - - Retuns the machine profile. - - - Retuns the amount of local profiles. - - - Retuns the Profile for Player pn. - - - Retuns true if the Profile for Player pn is persistent. - - - Saves the machine profile. - - - - - Returns the value of rc from . - - - - - Return the height of the display. - - - Return the width of the display. - - - - - These commands require a RageFile handle. You can create one using - . - - - Closes the file and releases it from memory. - - - Safely deletes the file handle. - - - Gets the last error message and returns it. - - - Gets a line and returns it. - - - Opens a file at sPath (relative to the StepMania root directory).
- iAccessType can be set to read (1), write (2), stream (4) or flush to disk on close (8).
- These can also be combined with addition. For example, to set up read and write, set iAccessType to 3 (1+2). -
- - Puts a new line in the file. - - - Returns a string containing the entire contents of the file. - - - Seeks to a position in the file and returns the new position. - - - Writes a file with the contents of str. - -
- - - Return an array of connected input device descriptions. - - - - - See for loading a sound. - - - Set the value of sProperty to fVal. The supported properties depend on how the associated was loaded. - - - Set the pitch to fPitch. The associated have SupportsRateChanging = true on load. - - - Set the speed (that is, the rate at which the sound plays) to fSpeed. The associated must have SupportsRateChanging = true on load. - - - - - Return the texture coordinate rectangle as {left, top, right, bottom}. - - - Sets the animation or movie looping to bLoop. - - - Sets the animation or movie position to fPos. - - - Sets the animation or movie playback rate to fRate. - - - - - Sets the target number to f. - - - - - Returns the name of the next Screen. - - - Locks input for f seconds. - - - Posts a message with the text sScreenMsg to the Screen. - - - - - Returns the StageStats. - - - - - Returns true if a single has its NoteField centered. - - - Returns the for the specified pn. - - - Sets the next Screen to be loaded. - - - Returns the next in the current . - - - - - Gets the screen at the top of the screen stack. - - - Returns true if screen class s exists. - - - Returns true if screen s is prepared. - - - Sets the next screen to s. - - - Broadcasts a system message. - - - - - Returns true if Player pn backspaced successfully. - - - Returns true if Player pn was able to add sKey to their name. - - - Attempts to finish Player pn and returns true - if successful. - - - Returns true if anyone is entering their name. - - - Returns true if anyone is still entering their name.
- (As opposed to those who are Finalized; see ) -
- - Returns true if Player pn is entering their name. - - - Returns true if Player pn is finished entering their name. - - - Gets the currently selected letter of Player pn. - -
- - - Returns the current row that player pn is on. - - - - - Returns true if we are going to PlayerOptions. - - - - - Continues to the next screen. - - - Returns true if there is a profile that can be loaded. - - - - - Continues to the next screen. - - - Returns true if there is a profile that can be saved. - - - - - Tells the screen to go to the previous screen. - - - Attempts to finish the screen and returns true - if successful. - - - Returns the profile index of the specified Player. - - - Sets the profile index of Player pn to iProfileIndex. - - - - - Tells the screen to go to the previous screen. - - - - - Returns an array of all the available objects for a . - - - Returns the path to the song's background image. - - - Returns the path to the song's banner. - - - Returns the displayed artist of the song. - - - Returns the displayed full title of the song, including subtitle. - - - Returns the displayed main title of the song. - - - Returns the displayed subtitle of the song. - - - Returns the genre of the song. - - - Returns the group name that the song is in. - - - Returns a Step object if the StepType and Difficulty exist. - - - Returns the song's directory. - - - Returns a table of Steps that have StepsType st. - - - Returns the song's TimingData. - - - Returns the transliterated artist of the song. - - - Returns the transliterated full title of the song, including subtitle. - - - Returns the transliterated main title of the song. - - - Returns the transliterated subtitle of the song. - - - Returns true if the song has steps for the specified difficulty in st. - - - Returns true if the song meets the criteria for a "Long Version". - - - Returns true if the song meets the criteria for "Marathon" length. - - - Returns true if the song only has Beginner steps. - - - Returns the length of the song in seconds. - - - - - Returns a Course if one matching sCourse is found. - - - Returns a Song if one matching sSong is found. - - - Returns an array of all the installed courses. - - - Returns an array of all the installed songs. - - - Returns the course color of course c. - - - Returns the number of courses loaded via Additional folders. - - - Returns the number of songs loaded via Additional folders. - - - Returns the number of course groups. - - - Returns the number of courses. - - - Returns the number of selectable and unlocked songs. - - - Returns the number of song groups. - - - Returns the number of songs. - - - Returns the number of unlocked songs. - - - Returns a random course. - - - Returns a random song. - - - Returns the song color of song s. - - - Returns a Song given a set of Steps st. - - - Returns the song group color of sGroupName. - - - - - Returns the length of the animation in seconds. - - - Returns the Sprite's texture. - - - Returns a Frames table consisting of iNumFrames frames lasting for a total of fSeconds seconds. This function is not a member function and should be used as Frames = Sprite.LinearFrames( 5, 2.6 ). - - - If sPath is nil, then unload the texture. Otherwise, load the texture at path sPath. - - - Load the song background texture at sPath. - - - Load the song banner texture at sPath. - - - Load the texture for song's background. - - - Load the texture for song's banner. - - - - - - Set the to mode. - - - Set the texture to texture. - - - - - - - - - Call RageTexture:loop( bLoop ) on the texture. - - - Call RageTexture:position( fPos ) on the texture. - - - Call RageTexture:rate( fRate ) on the texture. - - - Scale the Sprite to width fWidth and height fHeight clipping if the dimensions do not match. - - - Set the Sprite's state to iNewState. - - - - - - Set the texture coordinate velocity which controls how the Sprite changes as it animates. - - - - - Returns true if everyone failed. - - - Returns the EarnedExtraStage value. - - - Returns the number of seconds played. - - - Returns the PlayerStageStats of multiplayer mp. - - - - Returns the PlayerStageStats of player pn. - - - - Returns the Stage value. - - - Returns the stage index. - - - Returns true if at least one person passed. - - - Returns true if player pn has a high score. - - - - - Returns the accumulated played StageStats. - - - Returns the best final grade. - - - Returns the best grade. - - - Returns the current StageStats. - - - Returns player pn's final grade. - - - Get the StageStats from iAgo rounds ago. - - - Returns the number of stages played. - - - Returns the worst grade. - - - Resets the stats. - - - - - Returns the Steps description. - - - Returns the Steps difficulty. - - - Returns the Steps filename from the Cache. - - - Returns the numerical difficulty of the Steps. - - - Returns the complete list of RadarValues for player pn. Use to grab a specific value. - - - Returns the Steps type. - - - Returns true if the steps were automatically generated. - - - - - Loads the StepsDisplay commands from the Metrics in group sMetricsGroup. - - - Sets the StepsDisplay from the GameState using Player pn. - - - Sets the StepsDisplay based on Steps pSteps. - - - Sets the StepsDisplay based on the passed in StepsType, iMeter, and Difficulty. - - - Sets the StepsDisplay based on Trail pTrail. - - - - - Returns the name of the Style. - - - Returns the StepsType for this Style. - - - Returns the StyleType for this Style. - - - - - Loads the TextBanner's child elements from a . - - - Loads the TextBanner's child elements from strings. - - - - - Returns the value of Element in Class from metrics.ini. - - - Returns the number of selectable themes. - - - Returns the path of ClassName Element in the BGAnimations folder. - - - Returns the path of an element in the Fonts folder. - - - Returns the path of an element in the Graphics folder. - - - Returns the path of an element in the Sounds folder. - - - Returns the value of Element in Class for the currently loaded language. - - - - - Returns true if the TimingData contains stops. - - - - - Returns an array with all the artists in the Trail. - - - Returns the Trail's difficulty. - - - Returns the Trail's difficulty rating. - - - Returns the Trail's RadarValues. - - - Returns the Trail's StepsType. - - - - - Sets the UnlockEntry's ID to m_sEntryID. - - - Sets the UnlockEntry's course to sCourseName.
- Example: course,"Driven" -
- - Returns the unlock description. - - - Returns the UnlockRequirement. - - - Returns true if the UnlockEntry requires you to pass Hard steps. - - - Returns the Song related to the UnlockEntry. - - - Returns the UnlockRewardType for this entry. - - - Returns true if the UnlockEntry is locked. - - - Sets the UnlockEntry's modifier to sModifier. - - - - - - Makes the UnlockEntry require passing Hard steps. - - - Makes the UnlockEntry hide in Roulette. - - - Sets the UnlockEntry's song to sSongName.
- sSongName also requires the group.
- Example: song,"In The Groove/Pandemonium" -
- - Sets the UnlockEntry to unlock a specified song's steps.
- Example: steps,"In The Groove/Pandemonium","expert" -
-
- - - Returns true if there are any unlocks to celebrate. - - - Returns the associated EntryID. - - - Returns the number of unlocked items. - - - Returns the number of all unlock items, regardless of status. - - - Returns the number of points until the next unlock. - - - Returns a table of songs unlocked by UnlockEntry sEntryID. - - - Returns a table of steps unlocked by UnlockEntry sEntryID. - - - Returns the UnlockEntry at iIndex. - - - Returns the UnlockEntry index to celebrate. - - - - Unlocks an entry by ID. - - - Unlocks an entry by index. - - - - - Returns the WheelItem at index iIndex. - - - - - Sets the WorkoutGraph from the current Workout. - - - Sets the WorkoutGraph from GameState and song index iSongIndex. - - -
- - - - - Blending modes. See . - - - - - Horizontal alignment. See . - - - - - Vertical alignment. See . - - - -
+ + + + + + + + + + + + Returns the base name of file path. + + + Returns a color from a string. color can be in + hex ("#FFFFFFFF") or 0..1 values ("1.0,1.0,1.0,1.0"), + in RGBA order. + + + Tries to connect to the server at sAddress. + + + Returns the current day of the month. + + + Returns the current day of the year. + + + Returns the number passed to the function followed by its suffix ("th", "nd", and so on). + + + Returns fPercentDancePoints formatted as a percentage. + + + Returns a corresponding for the given percentage. + + + Returns the current Life Difficulty. + + + Returns the theme's aspect ratio. + + + Returns the current hour. + + + Returns true if Event Mode is turned on. + + + Returns true if connected to the Internet. + + + Returns true if connected to StepMania Online. + + + Returns true if Player pn is logged on to + a SMOnline server. + + + Returns an Actor definition for the actor at sPath. If sPath points to a Lua file, any additional arguments will be passed to that script. + + + Returns the current Minute. + + + Returns the current month of the year. + + + Returns Month m as a localized string. + + + Returns Month m as a string. + + + Returns the current second. + + + Converts fSecs to Minutes:Seconds.Milliseconds format. + + + Returns a string representing an enum starting from '_'. For example, passing PlayerNumber_P1 to this function will return P1. + + + Alias for . + + + Alias for . + + + Returns the current year. + + + Returns the length of the multi-byte character string sString. + + + + Returns the name of the currently connected server. + + + Converts fSecs to Minutes:Seconds:Milliseconds format using two digits for each section. + + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section. + + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3). + + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Minutes (usese 1). + + + Converts fSecs to Minutes:Seconds format. + + + Returns a string with characters escaped for URLs. (e.g. a space becomes '%20') + + + + + [CustomSpeedMods] Returns a Lua option row with the custom speed mods defined in SpeedMods.txt. + + + + [FileUtils] Reads the file at path and returns its contents. + + + [FileUtils] Writes buf to the file at path. + + + + + + + + Returns true if sClassName is a registered Class. + + + + + Enumerated types are lookup tables associating a string to each numerical + value for each Enum. For example, + [1] would be the + string 'PlayerNumber_P1'.
+ The functions defined in the Enum namespace are valid member + functions of every Enum where the first argument is + omitted and the name of the Enum is used in place + of Enum. Instead of + Enum.GetName( + ) or + Enum.Reverse( + ), one can use + :GetName() or + :Reverse(), respectively. +
+ + Both x and y need to be elements of the enumerated + type e. Returns a value less than/greater than/equal to + 0 corresponding to the numerical value of x being + less than/greater than/equal to the numerical value of y as + determined by + Enum.Reverse( e ). + + + Returns the type of e. For example, + Enum.GetName( ) + will return the string 'PlayerNumber'. + + + Returns a reverse lookup table for the enumerated type e. For + example:
local r = + Enum.Reverse( );
+ local n = r['PlayerNumber_P2'];

+ The value of n in this case would be 1 corresponding + to the 0-based indexing using in C++ and not 2 as might be + expected for the 1-based indexing used in Lua. +
+
+ + + Writes sString to log.txt. Aliased by + . + + + Writes sString to info.txt and log.txt as + a warning. Aliased by . + + + Flushes log files to disk. + + + + + Creates a RageFile handle with which one can use the commands in . + + + + + Gets the credits message for Player pn. + + + + + Returns true if the song's steps (st) are playable. + + + Returns true if the song's StepsType (st) are playable. + + + + + Returns the number of songs in a Trail. + + + Returns the Trail's total length in seconds. + + +
+ + + + + + Returns the Actor's parent, or nil if it doesn't have one. + + + Returns the Actor's visibility. + + + Returns the Actor's x position. + + + Returns the Actor's y position. + + + Returns the Actor's z position. + + + Returns the Actor's zoom. + + + Returns the Actor's X zoom. + + + Returns the Actor's Y zoom. + + + Returns the Actor's Z zoom. + + + Sets Texture Filtering for an Actor to b. + + + Plays the commands that follow at an accelerated rate (fRate * fRate), where fRate is in seconds. + + + Adds xPos to the Actor's current x position. + + + Adds yPos to the Actor's current y position. + + + Adds zPos to the Actor's current z position. + + + Sets the alignment of an Actor, where h and v are in the range 0..1. + + + Sets whether or not the Actor should animate. + + + + Sets the Actor's aux value. + + + If true, cull the Actor's back faces. See also: . + + + Sets the Actor's base alpha to fAlpha, where fAlpha is in the range 0..1. + + + Sets the Actor's base X rotation to rot. + + + Sets the Actor's base Y rotation to rot. + + + Sets the Actor's base Z rotation to rot. + + + Sets the Actor's base X zoom to zoom. + + + Sets the Actor's base Y zoom to zoom. + + + Sets the Actor to use the specified blend mode. + + + Makes the Actor bob up and down. Can use to define different bobbing behavior. + + + [Actor.lua] Centers an Actor. + + + Crops percent of the Actor from the bottom, where percent is in the range 0..1. + + + Crops percent of the Actor from the left, where percent is in the range 0..1. + + + Crops percent of the Actor from the right, where percent is in the range 0..1. + + + Crops percent of the Actor from the top, where percent is in the range 0..1. + + + Sets the Actor's cull mode to mode. + + + Plays the commands that follow at an decelerated rate (1 - (1-fRate) * (1-fRate)), where fRate is in seconds. + + + Set the Actor's diffuse color to c. + + + Sets the Actor's alpha level to fAlpha, where fAlpha is in the range 0..1. + + + Sets the Actor's bottom edge color to c. + + + Set the Actor's diffuse color to c, ignoring any alpha value in c. + + + Sets the Actor's left edge color to c. + + + Sets the Actor's lower left corner color to c. + + + Sets the Actor's lower right corner color to c. + + + Sets the Actor's right edge color to c. + + + Sets the Actor's top edge color to c. + + + Sets the Actor's upper left corner color to c. + + + Sets the Actor's upper right corner color to c. + + + Sets the Actor's draworder to iOrder, where larger values display first. + + + Set the Actor's effect clock to s. + + + Sets the first effect color to c. + + + Sets the second effect color to c. + + + Set the Actor's effect magnitude in each direction to the given values. + + + Set the Actor's effect offset to fTime. + + + Set the Actor's effect period to fTime. + + + Fades percent of the Actor from the bottom where percent is in the range 0..1. + + + Fades percent of the Actor from the left where percent is in the range 0..1. + + + Fades percent of the Actor from the right where percent is in the range 0..1. + + + Fades percent of the Actor from the top where percent is in the range 0..1. + + + Finishes up an Actor's tween immediately. + + + Stretches an Actor to fill the entire screen. + + + + Returns the Actor's aux value. + + + Returns true if the Actor has a command named sCmdName. + + + Returns the Actor's current diffuse color. + + + Returns the Actor's current diffusealpha. + + + Returns the Actor's name. + + + Returns the number of states the Actor has. + + + Returns the Actor's current height. + + + Returns the Actor's current X rotation. + + + Returns the Actor's current Y rotation. + + + Returns the Actor's current Z rotation. + + + Returns the Actor's current width. + + + Returns the zoomed height of an Actor. + + + Returns the zoomed width of an Actor. + + + Sets the Actor's glow color. + + + + + + Set the fractional horizontal alignment of the Actor according to fAlign which should be a float in the range 0..1. An alignment of 0 is left aligned while an alignment of 1 is right aligned. See for the common case. + + + [Deprecated] Compatibility alias for the hidden command, which was removed in sm-ssc. Use instead. + + + Set the horizontal alignment of the Actor according to align. See for fractional alignment. + + + Hurries up an Actor's tweening by factor. + + + Plays the commands that follow at a normal rate, where fRate is in seconds. + + + Sets the Actor's name to sName. + + + Plays a command named sCommandName. + + + Makes the Actor grow and shrink. Can use to define different pulsing behavior. + + + Queues a command named sCommandName to be played. + + + Makes the Actor change colors continually using colors of the rainbow. + + + Set the Actor's rotation on the X axis to fAlign. + + + Set the Actor's rotation on the Y axis to fAlign. + + + Set the Actor's rotation on the Z axis to fAlign. + + + Scales the Actor to cover a rectangle defined by the four float arguments. + + + Scales the Actor to fit inside a rectangle defined by the four float arguments. + + + Sets a multi-framed Actor's state to iNewState. + + + Sets the shadow's color to c. + + + Sets the Actor's shadow length to fLength. + + + Sets the Actor's horizontal shadow length to fLength. + + + Sets the Actor's vertical shadow length to fLength. + + + Skews the Actor on the x axis by fAmount. + + + Skews the Actor on the y axis by fAmount. + + + Waits fSeconds before executing the next command. + + + Tells the Actor to spin. Can use to define different spinning behavior. + + + Stops any effect the Actor has. + + + Stretches the Actor to a rectangle of a specific size. + + + Set the fractional vertical alignment of the Actor according to fAlign which should be a float in the range 0..1. An alignment of 0 is top aligned while an alignment of 1 is bottom aligned. See for the common case. + + + Set the vertical alignment of the Actor according to align. See for fractional alignment. + + + Makes the Actor vibrate violently. Can use to define different vibration behavior. + + + Sets an Actor's visibility to b. + + + Set the x position of the Actor to xPos. + + + Set the y position of the Actor to yPos. + + + Set the z position of the Actor to zPos. + + + Zooms the Actor to zoom scale. + + + Zooms the Actor on both the X and Y axis using zoomX and zoomY. + + + Zooms the Actor to zoom height. See also: . + + + Zooms the Actor to zoom width. See also: . + + + Zooms the Actor to zoom scale on the X axis. + + + Zooms the Actor to zoom scale on the Y axis. + + + Zooms the Actor to zoom scale on the Z axis. + + + + [ProductivityHelpers] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X) + + + [ProductivityHelpers] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y) + + + [ProductivityHelpers] Sets and Actor as a mask destination. + + + [ProductivityHelpers] Sets an Actor as a mask source. (Also clears zbuffer; other mask sources need to not clear the zbuffer) + + + [ProductivityHelpers] A customized version of pulse that is more appealing for on-beat effects. + + + [ProductivityHelpers] Sets the x and y location of the Actor in one command. + + + + + Sets the field of view for the ActorFrame. + + + Returns the child with a name of sName. + + + Returns an table of all the children in the ActorFrame. + + + Gets the ActorFrame's Draw function. + + + Returns the number of children in the ActorFrame. + + + Sets the ActorFrame's ambient light color to c. + + + Sets the ActorFrame's diffuse light color to c. + + + Sets if the ActorFrame should draw by Z position. + + + Sets the ActorFrame's Draw function to the specified Lua function. + + + Sets the field of view for the ActorFrame. + + + Currently unimplemented since it does not handle errors correctly. Arguments must be passed in as a table. + + + Sets the ActorFrame's specular light color to c. + + + Sets the ActorFrame's update function to the specified Lua function. + + + Sets the update function's rate to fRate. + + + Tells the ActorFrame to sort by draw order. + + + Sets the vanishing point for the ActorFrame. + + + + + Clears all the textures from the MultiTexture. + + + Sets the EffectMode on the MultiTexture. + + + Sets a TextureMode on the specified index. + + + + + Returns the target of the ActorProxy. + + + Sets the ActorProxy target to a. + + + + + Returns the scroller's current item. + + + Returns the item the scroller's going to. + + + Returns how long it will take for the scroller to completely scroll through all its items. + + + Returns the number of items in the ActorScroller. + + + Returns the number of seconds until the scroller reaches its destination. + + + Compatibility alias for . + + + Positions the scroller items. + + + Scrolls through all the items in the scroller. + + + Compatibility alias for . + + + Scrolls through all the items in the scroller with padding at the beginning and end. + + + Compatibility alias for . + + + Sets the item the scroller should scroll to next and makes it the current item. + + + Sets the item the scroller should scroll to next. + + + Sets if the scroller should catch up fast. + + + Compatibility alias for . + + + Specifies if the scroller should loop or not. + + + Sets the scroller's mask to a Quad that is fWidth by fHeight pixels. + + + Sets the scroller to draw fNumItems items. + + + Sets the number of subdivisions in the scroller. + + + Compatibility alias for . + + + Sets the scroller's pause countdown to fSecs. + + + Sets the scroller's pause between items to fSeconds. + + + Sets how many seconds the scroller should spend on each item.
+ A value of 0 means the scroller will not scroll. +
+ + Compatibility alias for . + + + Sets the scroller's transform function to the specified Lua function. + + + Sets the scroller's transform function from fItemHeight. + + + Sets the scroller's transform function from fItemWidth. + +
+ + + This Actor represents a playable sound. There are two attributes that can be set on load.
+ * SupportPan - Let the sound pan from side to side.
+ * SupportRateChanging - Let the sound change rate and pitch. +
+ + Returns the that can be played by this Actor. + + + Loads the sound at sPath. + + + Pauses or unpauses the sound based on bPause. + + + Plays the sound. + + + Plays the sound on the given player's side. You must set SupportPan = true on load. + + + Stops the sound. + +
+ + + Loads the background from an UnlockEntry. + + + Loads the banner from an UnlockEntry. + + + Loads the card image from the specified Character. + + + + + + Loads a Banner from a specified Course. + + + Loads a Banner from a specified Song. + + + Loads a Banner from a specified Song Group. + + + Loads an icon from the specified Character. + + + See . + + + See . + + + + + Add the attribute attr to the string at position + iPos.
+ The attribute is a table that must contain Length + which specifies how many (multi-byte) characters the attribute + is to apply. If Length=-1, then the attribute applies + until another attribute overrides it.
+ If the table contains Diffuse, then the color value + is applied to the range of text.
+ If the table contains Diffuses, then it should be + an array of 4 colors which specify the diffuse color for the + top left, top right, bottom left, and bottom right.
+ If the table contains Glow, then the color value + is applied as a glow to the range of text.
+ Example:
+ attr = { Length = 10; Diffuse = color("#AABBCC"); } +
+ + Clear all attributes associated with the BitmapText. + + + [ProductivityHelpers] Sets the diffuse and stroke color of text in one command. + + + Returns the text that is currently set. + + + If bJitter is true, move each character of the string around by a small random amount. + + + Set the maximum height of the unzoomed text to fHeight. If fHeight is 0, then there is no maximum height. + + + Set the maximum width of the unzoomed text to fWidth. If fWidth is 0, then there is no maximum width. + + + [ProductivityHelpers] Remove any stroke color. + + + [ProductivityHelpers] Alias for setting to false. + + + If true, set each character of the text in turn to the rainbow colors in the metrics BitmapText::RainbowColor#. + + + Set the text to sText. This clears all attributes. + + + [ProductivityHelpers] Sets text using string.format(sFormat, ...). + + + [ProductivityHelpers] Alias for . + + + Sets the stroke color to c. + + + If true, make all text uppercase. + + + Add iSpacing pixels of padding between lines of text. + + + Wrap the unzoomed text at iWidth pixels. If you or by x and you want the text wrapped at width, then you should use wrapwidthpixels(width/x). + +
+ + + Returns the text that is currently set at the exact moment you call it. This is likely only going to be useful in an Update command. + + + Sets the BPMDisplay from the GameState. + + + + + Returns the path to the character's card graphic. + + + Returns the path of the dancing animation of this character. + + + Returns the path to the character's icon. + + + Returns the path of the model of this character. + + + Returns the path of the rest animation of this character. + + + Returns the path to the character's ScreenSelectMode icon. + + + Returns the path to the character's ScreenStage icon. + + + Returns the path of the warm-up animation of this character. + + + + + Returns a table of all characters installed. + + + Return the corresponding to sID. + + + Returns a random character. + + + + + Loads the ComboGraph commands from the Metrics in group sMetricsGroup. + + + Sets the values of the ComboGraph using the specified StageStats and PlayerStageStats. + + + + + Loads the ControllerStateDisplay from the specified GameController. + + + Loads the ControllerStateDisplay from the specified MultiPlayer. + + + + + Returns a table of all the Trails in the Course. + + + Returns the path to the Course's banner. + + + Gets the CourseEntry at iIndex from the Course. + + + Returns the Course's . (Returns CourseType in sm-ssc; integer in SM4) + + + Returns the full display title of the Course. + + + Returns the estimated number of stages for the Course. + + + Returns the goal seconds for the Course. + + + Returns the Course's group name. + + + Returns the Course's . (Returns PlayMode in sm-ssc; integer in SM4) + + + Returns the total length of the Course in seconds. + + + Returns the full transliterated title of the Course. + + + Returns true if the Course has modifiers. + + + Returns true if the Course has timed modifiers. + + + Returns true if the Course was automatically generated. + + + Returns true if the Course is Endless. + + + + Returns true if the Course has a banner. + + + Returns true if the Course is Nonstop. + + + Returns true if the Course is Oni. + + + + + Sets the CourseContentsList from the GameState. + + + + + Returns the Song that this CourseEntry corresponds to. + + + + + Returns the MD5 hash for the file at sPath. + + + Returns the MD5 hash for s. + + + Returns the SHA-1 hash for s. + + + + + Sets the DifficultyIcon's state from the difficulty passed in. + + + Sets the DifficultyIcon's Player to pn, + then sets the DifficultyIcon's state from the difficulty of Steps pSteps + + + Sets the DifficultyIcon's Player to pn, + then sets the DifficultyIcon's state from the difficulty of Trail pTrail + + + Sets the DifficultyIcon's Player to pn. + + + Blanks the DifficultyIcon. + + + + + Sets the StepsDisplayList from the GameState. + + + + + Returns the name of the game such as "dance" or "pump". + + + + + Returns the index of this item. + + + Returns any MultiPlayer that may have been set. + + + Returns the choice name. + + + Returns any Profile ID that may have been set. + + + Returns any Song that may have been set. + + + Returns the name of any song group that may have been set. + + + Returns any Style that may have been set. + + + Returns the display text. + + + Returns any Url that may have been set. + + + + + Return the first of the corresponding to game. + + + Returns true if any noteskins exist for the specified Game g. + + + Return the localized string representation of st. + + + + + Set the music volume to fVolume for fDuration seconds. + + + + Return the sound balance for pn. + + + Play the sound at sPath one time. + + + + + Returns true if any player has performed a feat worthy of ranking. + + + The second argument is optional. Apply the GameCommand represented by sCommand + for pn, if given. See . + + + Returns true if enough credits have been inserted to join. + + + Returns the environment table. See . + + + Returns the current . + + + Return the number of inserted but unused coins. This number is + decremented when players join. + + + Return the number of coins needed to join based on the current coin and premium modes + as well as the number of people joined, if that matters for the premium mode. See + and . + + + The s in a are numbered sequentially + starting from 0. Return the number of the current . + + + Return the current . + + + Return the current . + + + Return the current . + + + Return the current . + + + Return the current for the specified Player. + + + Return a variable number of arguments based on the being + played by all players. For each distinct being played by + the players, in increasing order, + the difficulty and description of the is returned as strings. +
For example,
+ local credits = {GAMESTATE:GetCurrentStepsCredits()};
+ will make a table of the difficulties and descriptions. +
+ + Return the current . + + + Return the current for the specified player. + + + Return a string representation of the default song options. + + + Return the easiest of the + currently selected steps by all players. For example, if player 1 has + selected Hard steps and player 2 has selected Medium steps, Medium will + be returned. + + + + + + + Return the Edit Local or nil if + it does not exist. + + + + + + Return the source for the editor or nil + if it does not exist. + + + Return the random seed for the game. + + + Return true if the gameplay lead in is enabled. If + false, gameplay begins immediately. + + + Return the hardest of the + currently selected steps by all players. For example, if player 1 has + selected Hard steps and player 2 has selected Medium steps, Hard will + be returned. + + + Returns an array of s corresponding to Human players. + + + Returns the master player number. + + + Returns true if the game is Multiplayer. + + + Returns the number of active multiplayer NoteFields. + + + Returns the number of players enabled. + + + Returns the number of sides joined. + + + Returns the number of stages for the current Song and its Steps or the current Course. + + + Returns the number of stages left for player pn. + + + Returns the display name for player pn. + + + Returns the PlayerState for player pn. + + + Returns the current PlayMode. + + + Returns the preferred difficulty. + + + Returns the preferred song. + + + Returns the preferred song group. + + + Returns the current Premium. + + + + Returns the current beat of the song. + + + Returns the current visible beat of the song. + + + Returns the song's current beats per second. + + + Returns true if a delay is active in the song. + + + Returns true if the song is currently in a freeze. + + + Returns the song options as a string. + + + Returns how much of the song is through at beat fBeat. + + + Returns the current SortOrder. + + + Returns the current stage index. + + + Return the random seed for the current stage. + + + Returns true if the workout goal is complete. + + + Returns true if an extra stage was earned. + + + Returns true if this is an extra stage. + + + Returns true if any human player is using a memory card. + + + Returns true if playing in Battle mode. + + + Returns true if playing in a Course mode. + + + Returns true if in Demonstration mode. + + + Returns true if the match was a draw. + + + Returns true if Event Mode is on, temporary or otherwise. + + + Returns true if this is the first extra stage. + + + Returns true if this is the second extra stage. + + + Returns true if player pn has completed the current Goal. + + + Returns true if player pn is human. + + + Returns true if player pn is enabled. + + + Returns true if player pn has joined the game. + + + Returns true if player pn is the winner. + + + Joins player pn. + + + Returns true if player pn is using modifier sModifier. + + + Returns true if players can join the game. + + + Resets the GameState. + + + Saves the bookkeeping and machine profile data. + + + Sets the current Course to course. + + + Sets the current Song to song. + + + Sets Player pn's current Steps to steps. + + + Sets the current Trail to trail. + + + Sets if the Jukebox should use modifiers. + + + Sets the number of multiplayer notefields to iFields + + + Sets the preferred difficulty of Player pn to Difficulty dc. + + + Sets the preferred Song to song. + + + Sets the preferred song group to sGroup. + + + Sets the Song Options from so using ModsLevel m. + + + Turns temporary Event Mode on or off, depending on bOn. + + + Determines if Judgment W1 should be shown based on bOn. + + + Unjoins player pn. + +
+ + + Loads the GradeDisplay commands from the Metrics in group sMetricsGroup. + + + Sets the GradeDisplay to show Grade g. + + + + + Loads the GraphDisplay commands from the Metrics in group sMetricsGroup. + + + Sets the values of the GraphDisplay using the specified StageStats and PlayerStageStats. + + + + + Sets the GrooveRadar values for Player pn to empty. + + + Sets the GrooveRadar values for Player pn from RadarValues rv + + + Tweens the GrooveRadar off screen. + + + Tweens the GrooveRadar on screen. + + + + + Returns two tables representing the tips and alternate tips in the HelpDisplay. + + + Sets the seconds between switches of tips to fSeconds. + + + Sets the HelpDisplay's tips using tips (and optionally altTips). + + + Sets the HelpDisplay's text from sTips using colons to separate new sections. + + + + + Returns the date and time the high score was achieved. + + + Return the number of HoldNoteScores that match hns. + + + Returns the modifiers used for this HighScore. + + + Returns the name associated with the high score. + + + Returns the percentage of dance points associated with the high score. + + + Returns the RadarValues for this HighScore. + + + Returns the score associated with the high score. + + + Returns the number of seconds survived associated with the high score. + + + Return the number of TapNoteScores that match tns. + + + + + You can get a HighScoreList using . + + + Returns a table of the high scores. + + + + + Returns the amount of life left in the LifeMeter as a float in the range 0..1. + + + Returns true if failing. + + + Returns true if the LifeMeter is "hot". + + + Returns true if in danger. + + + + + Return the state for player pn. + + + Returns the name of the storage device. + + + + + Pauses the MenuTimer, stopping it from counting down. + + + Sets the MenuTimer's value to fSeconds. + + + Sets the MenuTimer's silent setting to bSilent. + + + Sets the MenuTimer's stealth setting to bStealth. If + true, the timer will be invisible and silent. + + + Stops the MenuTimer by setting it to 0 and pausing. + + + + + Broadcast the message to all listeners subscribed to sMessage. The + second argument is an optional table of parameters. It may be omitted or explicitly + set to nil. + + + + + Controls if the model should loop or not. + + + Plays animation sAniName at fPlayRate speed (default 1.0). + + + Sets how far into the animation the model is. + + + Sets the current animation's playback rate to fRate. + + + Sets the model's default animation to sAnimation at fPlayRate speed (default 1.0). + + + + Returns the number of states the Model has. + + + + + Loads the ModIconRow of Player pn from the Metrics in group sMetricsGroup. + + + + + Returns a command from the specified element and value. + + + Returns a bool from the specified element and value. + + + Returns a float from the specified element and value. + + + Returns a integer from the specified element and value. + + + Returns the path for the specified sButton sElement. + + + Returns the actor for the specified sButton sElement. + + + + Returns true if the strName noteskin exists in the current gametype. + + + Returns a table of noteskin names for the current gametype. + + + + + Sets the PaneDisplay from the GameState. + + + + + Sets the PaneDisplay from the specified PlayerState and PlayerStageStats. + + + + + Returns the of player pn. + + + + + Returns true if a full combo (TNS_W3 and up) was obtained. + + + Returns true if a full combo (tns and up) was obtained. + + + Returns the number of Dance Points obtained by the player. + + + Returns how long the player has been alive. + + + Returns the number of calories burned. + + + Returns the player's current combo. + + + Returns the player's current life from 0..1. + + + Returns the player's current miss combo. + + + Returns the number of Dance Points possible to be obtained by the player. + + + Returns the player's current score multiplier. + + + Returns the player's grade. + + + Returns the number of judgments for a specified HoldNoteScore. + + + Returns the player's actual score on the lesson. + + + Returns the score needed to pass the lesson. + + + Returns the player's life remaining seconds. + + + Returns the machine high score index for this performance. + + + Returns the peak combo award for this performance. + + + Returns the personal high score index for this performance. + + + Returns a table of played steps. + + + Returns the player's Dance Point percentage. + + + Returns the number of possible Dance Points. + + + Returns a table of possible steps. + + + Returns the score. + + + Returns the stage award for this performance. + + + Returns how long the player survived in seconds. + + + Returns the number of judgments for a specified TapNoteScore. + + + Returns the max combo for this performance. + + + Returns true if the player was disqualified from ranking. + + + + + Returns the PlayerController for this PlayerState. + + + Returns the player number for this PlayerState. + + + Sets the player options to sPlayerOptions for the specified ModsLevel. + + + Returns a string of player options for the specified ModsLevel. + + + + + Return the value of the preference sPreference. + + + Set the value of the preference sPreference to value. + + + Reset preference sPreference to the default value. + + + + + Returns the number of calories burned during the current day. + + + Returns the Character being used by this profile. + + + Returns a composite of your high scores over courses with the specified StepsType and Difficulty. + + + Returns the percentage of courses that you've completed with the specified StepsType and Difficulty. + + + Returns the possible score of courses with the specified StepsType and Difficulty. + + + Returns the profile's display name. + + + Return the number of calories burned as a string. + + + Returns the number of calories needed to reach the goal. + + + Returns the number of seconds needed to reach the goal. + + + Returns the current goal type. + + + Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t) + + + Returns the number of Toasties gotten using the specified profile. + + + Returns the profile's most popular course. + + + Returns the profile's most popular song. + + + Returns the total number of songs played with the profile. + + + Returns the number of times song s has been played with the profile. + + + Returns a composite of your high scores over songs with the specified StepsType and Difficulty. + + + Returns the percent complete for all songs and courses for the specified StepsType st. + + + Returns the percentage of songs that you've completed with the specified StepsType and Difficulty. + + + Returns the possible score of songs with the specified StepsType and Difficulty. + + + Return the total number of calories burned. + + + Returns the number of Hands stepped on. + + + Returns the number of successful Holds. + + + Returns the number of Jumps stepped on. + + + Returns the number of Mines stepped on. + + + Returns the total number of songs played with the profile. + + + Returns the number of successful Rolls. + + + Returns the number of steps with the specified StepsType and Difficulty that you've scored a certain Grade g on. + + + Returns the number of Taps and successful Holds. + + + Returns the number of trails with the specified StepsType and Difficulty that you've scored a certain Grade g on. + + + Returns how much the player weighs. + + + Returns true if the player has passed any steps in the specified Song s. + + + Returns true if the specified code sUnlockEntryID is unlocked. + + + Sets the goal to iCals calories. + + + Sets the goal to iSecs seconds. + + + Sets the current goal type to gt. + + + Sets how much the player weighs (in pounds) to weightPounds. + + + + Returns the amount of time this profile has spent in gameplay (in seconds). + + + Returns the number of sessions this profile has had. + + + Returns the total session length (in seconds) of this profile. + + + + + + + + + Retuns the machine profile. + + + Retuns the amount of local profiles. + + + Returns the profile for player pn. + + + Returns the profile directory of the specified ProfileSlot. + + + Returns true if player pn's profile is persistent. + + + Returns true if Song s has never been played before (according to the machine profile). + + + Saves the machine profile. + + + + + Returns the value of rc from . + + + + + Return the height of the display. + + + Return the width of the display. + + + + + These commands require a RageFile handle. You can create one using + . + + + Returns true if the current position within the file is the end. (EOF = End of File) + + + Clears the last error message. + + + Closes the file and releases it from memory. + + + Safely deletes the file handle. + + + Gets the last error message and returns it. + + + Gets a line and returns it. + + + Opens a file at sPath (relative to the StepMania root directory).
+ iAccessType can be set to read (1), write (2), stream (4) or flush to disk on close (8).
+ These can also be combined with addition. For example, to set up read and write, set iAccessType to 3 (1+2). +
+ + Puts a new line in the file. + + + Returns a string containing the entire contents of the file. + + + Seeks to a position in the file and returns the new position. + + + Returns the current position in the file. + + + Writes a file with the contents of str. + +
+ + + Returns true if a file exists at sPath. + + + Returns a listing of files from sPath. The last two arguments are optional (and default to false). + + + Returns a file's size in bytes. + + + Returns the hash of the file at sPath. + + + + + Return an array of connected input device descriptions. + + + + + See for loading a sound. + + + Sets the value of sProperty to fVal. The supported properties depend on how the associated was loaded. + + + Sets the pitch to fPitch. The associated have SupportsRateChanging = true on load. + + + Sets the speed (that is, the rate at which the sound plays) to fSpeed. The associated must have SupportsRateChanging = true on load. + + + Sets the volume to fVolume, which is between 0..1. + + + + + Return the texture coordinate rectangle as {left, top, right, bottom}. + + + Sets the animation or movie looping to bLoop. + + + Sets the animation or movie position to fPos. + + + Sets the animation or movie playback rate to fRate. + + + + + Sets the target number to f. + + + + + Returns the name of the next Screen. + + + Returns the name of the previous Screen. + + + Locks input for f seconds. + + + Posts a message with the text sScreenMsg to the Screen. + + + + + Returns true if a single has its NoteField centered. + + + Returns the for the specified pn. + + + Returns the next in the current . + + + Sets the next Screen to be loaded. + + + Returns true if the game is paused. + + + Pauses or unpauses the game, depending on the value of bPause. + + + + + Gets the screen at the top of the screen stack. + + + Returns true if screen class s exists. + + + Returns true if screen s is prepared. + + + Sets the next screen to s. + + + Broadcasts a system message. + + + + + Returns true if Player pn backspaced successfully. + + + Returns true if Player pn was able to add sKey to their name. + + + Attempts to finish Player pn and returns true + if successful. + + + Returns true if anyone is entering their name. + + + Returns true if anyone is still entering their name.
+ (As opposed to those who are Finalized; see ) +
+ + Returns true if Player pn is entering their name. + + + Returns true if Player pn is finished entering their name. + + + Gets the currently selected letter of Player pn. + +
+ + + Returns true if all active players are on the last options row. + + + Returns the current row that player pn is on. + + + + + Returns true if we are going to PlayerOptions. + + + + + Continues to the next screen. + + + Returns true if there is a profile that can be loaded. + + + + + Continues to the next screen. + + + Returns true if there is a profile that can be saved. + + + + + Tells the screen to go to the previous screen. + + + Attempts to finish the screen and returns true + if successful. + + + Returns the profile index of the specified Player. + + + Sets the profile index of Player pn to iProfileIndex. + + + + + Tells the screen to go to the previous screen. + + + + + Returns an array of all the available objects for a . + + + Returns the path to the song's background image. + + + Returns the path to the song's banner. + + + Returns the beat from fElapsedTime. + + + Returns the BPM at fBeat. + + + Gets the path to the CDTitle. + + + Returns the displayed artist of the song. + + + Returns the displayed full title of the song, including subtitle. + + + Returns the displayed main title of the song. + + + Returns the displayed subtitle of the song. + + + Returns the elapsed time from fBeat. + + + Returns the first beat of the song. + + + Returns the last beat of the song. + + + Gets the path to the lyrics. + + + Gets the path to the music file. + + + Returns the displayed subtitle of the song. + + + Returns the genre of the song. + + + Returns the group name that the song is in. + + + Returns a Step object if the StepType and Difficulty exist. + + + Returns the song's directory. + + + Returns the songfile path. + + + Returns a table of Steps that have StepsType st. + + + Returns how long the longest stepchart is in seconds. + + + Returns the song's TimingData. + + + Returns the transliterated artist of the song. + + + Returns the transliterated full title of the song, including subtitle. + + + Returns the transliterated main title of the song. + + + Returns the transliterated subtitle of the song. + + + Returns true if the song has steps for the specified difficulty in st. + + + Returns true if the song has a background. + + + Returns true if the song has a banner. + + + Returns true if the song has BGChanges. + + + Returns true if the song has a CDTitle. + + + Returns true if the song has edits. + + + Returns true if the song has lyrics. + + + Returns true if the song has music. + + + Returns true if the song has significant elephants or bison. + + + Returns true if the song has . + + + Returns true if the song is considered easy. + + + Returns true if the song is enabled. + + + Returns true if the song meets the criteria for a "Long Version". + + + Returns true if the song meets the criteria for "Marathon" length. + + + Returns true if the song only has Beginner steps. + + + Returns the length of the song in seconds. + + + Returns true if the song is normally displayed. + + + + + Returns a Course if one matching sCourse is found. + + + Returns a Song if one matching sSong is found. + + + Returns an array of all the installed courses. + + + Returns an array of all the installed songs. + + + Returns the course color of course c. + + + Returns the number of courses loaded via Additional folders. + + + Returns the number of songs loaded via Additional folders. + + + Returns the number of course groups. + + + Returns the number of courses. + + + Returns the number of selectable and unlocked songs. + + + Returns the number of song groups. + + + Returns the number of songs. + + + Returns the number of unlocked songs. + + + Returns a random course. + + + Returns a random song. + + + Returns the song color of song s. + + + Returns a Song given a set of Steps st. + + + Returns the song group color of sGroupName. + + + + + Returns the length of the animation in seconds. + + + Return the number of states this Sprite has. + + + Returns the Sprite's current state (frame number in a multi-frame sprite). + + + Returns the Sprite's texture. + + + Returns a Frames table consisting of iNumFrames frames lasting for a total of fSeconds seconds. This function is not a member function and should be used as Frames = Sprite.LinearFrames( 5, 2.6 ). + + + If sPath is nil, then unload the texture. Otherwise, load the texture at path sPath. + + + Load the song background texture at sPath. + + + Load the song banner texture at sPath. + + + Load the texture for song's background. + + + Load the texture for song's banner. + + + + + + Set the to mode. + + + Set the texture to texture. + + + + + + + + + Call RageTexture:loop( bLoop ) on the texture. + + + Call RageTexture:position( fPos ) on the texture. + + + Call RageTexture:rate( fRate ) on the texture. + + + Scale the Sprite to width fWidth and height fHeight clipping if the dimensions do not match. + + + Set the Sprite's state to iNewState. + + + + + + Set the texture coordinate velocity which controls how the Sprite changes as it animates. + + + + Crops the Sprite to fWidthxfHeight. + + + Alias for CropTo. + + + + + Returns true if everyone failed. + + + Returns the EarnedExtraStage value. + + + Returns the number of seconds played. + + + Returns the PlayerStageStats of multiplayer mp. + + + + Returns the PlayerStageStats of player pn. + + + + Returns the Stage value. + + + Returns the stage index. + + + Returns true if at least one person passed. + + + Returns true if player pn has a high score. + + + + + Returns the accumulated played StageStats. + + + Returns the best final grade. + + + Returns the best grade. + + + Returns the current StageStats. + + + Returns player pn's final grade. + + + Get the StageStats from iAgo rounds ago. + + + Returns the number of stages played. + + + Returns the worst grade. + + + Resets the stats. + + + + + Returns the Steps description. + + + Returns the Steps difficulty. + + + Returns the Steps filename from the Cache. + + + Returns a hash of the Steps. + + + Returns the numerical difficulty of the Steps. + + + Returns the complete list of RadarValues for player pn. Use to grab a specific value. + + + Returns the Steps type. + + + Returns true if the Steps are an edit. + + + Returns true if the Steps are a player edit (loaded from a profile). + + + Returns true if the steps were automatically generated. + + + + + Loads the StepsDisplay commands from the Metrics in group sMetricsGroup. + + + Sets the StepsDisplay from the GameState using Player pn. + + + Sets the StepsDisplay based on Steps pSteps. + + + Sets the StepsDisplay based on the passed in StepsType, iMeter, and Difficulty. + + + Sets the StepsDisplay based on Trail pTrail. + + + + + Returns the name of the Style. + + + Returns the StepsType for this Style. + + + Returns the StyleType for this Style. + + + + + Loads the TextBanner's child elements from a . + + + Loads the TextBanner's child elements from strings. + + + + + Returns the theme's current directory. + + + Returns the value of Element in Class from metrics.ini. + + + Returns the number of selectable themes. + + + Returns the path of ClassName Element in the BGAnimations folder. + + + Returns the path of an element in the Fonts folder. + + + Returns the path of an element in the Graphics folder. + + + Returns the path of an element in the Other folder. + + + Returns the path of an element in the Sounds folder. + + + Returns the value of Element in Class for the currently loaded language. + + + Returns the author of the current theme or "[unknown author]". + + + Returns the display name of the current theme. + + + Reloads the current theme's metrics. + + + + + Returns the minimum and maximum BPM of the song in a table (in that order). + + + Returns a table of the BPMs as strings. + + + Returns a table of the BPMs and the times they happen as strings with the format "beat=BPM". + + + Returns a table of the Stops and the times they happen as strings with the format "beat=stop seconds". + + + Returns true if the TimingData contains BPM changes. + + + Returns true if the TimingData contains stops. + + + + + Returns an array with all the artists in the Trail. + + + Returns the Trail's difficulty. + + + Returns the Trail's difficulty rating. + + + Returns the Trail's RadarValues. + + + Returns the Trail's StepsType. + + + + + Sets the UnlockEntry's ID to m_sEntryID. + + + Sets the UnlockEntry's course to sCourseName.
+ Example: course,"Driven" +
+ + Returns the unlock description. + + + Returns the UnlockRequirement. + + + Returns true if the UnlockEntry requires you to pass Hard steps. + + + Returns the Song related to the UnlockEntry. + + + Returns the UnlockRewardType for this entry. + + + Returns true if the UnlockEntry is locked. + + + Sets the UnlockEntry's modifier to sModifier. + + + + + + Makes the UnlockEntry require passing Hard steps. + + + Makes the UnlockEntry hide in Roulette. + + + Sets the UnlockEntry's song to sSongName.
+ sSongName also requires the group.
+ Example: song,"In The Groove/Pandemonium" +
+ + Sets the UnlockEntry to unlock a specified song's steps.
+ Example: steps,"In The Groove/Pandemonium","expert" +
+
+ + + Returns true if there are any unlocks to celebrate. + + + Returns the associated EntryID. + + + Returns the number of unlocked items. + + + Returns the number of all unlock items, regardless of status. + + + Returns the number of points until the next unlock. + + + Returns a table of songs unlocked by UnlockEntry sEntryID. + + + Returns a table of steps unlocked by UnlockEntry sEntryID. + + + Returns the UnlockEntry at iIndex. + + + Returns the UnlockEntry index to celebrate. + + + + Unlocks an entry by ID. + + + Unlocks an entry by index. + + + + + Returns the WheelItem at index iIndex. + + + Returns true if the wheel is locked. + + + Returns true if the wheel is settled/stopped moving. + + + Moves the wheel by n. + + + + + Sets the WorkoutGraph from the current Workout. + + + Sets the WorkoutGraph from GameState and song index iSongIndex. + + +
+ + + + + Blending modes. See . + + + + + Horizontal alignment. See . + + + + + Vertical alignment. See . + + + +
diff --git a/Docs/Luadoc/closed.gif b/Docs/Luadoc/closed.gif new file mode 100644 index 0000000000..d1fe4ca2b5 Binary files /dev/null and b/Docs/Luadoc/closed.gif differ diff --git a/Docs/Luadoc/open.gif b/Docs/Luadoc/open.gif new file mode 100644 index 0000000000..4472026e25 Binary files /dev/null and b/Docs/Luadoc/open.gif differ diff --git a/Docs/README-GUIDELINES b/Docs/README-GUIDELINES index 7707681340..2dc30fba93 100644 --- a/Docs/README-GUIDELINES +++ b/Docs/README-GUIDELINES @@ -1,30 +1,30 @@ -Bits of possibly less-than-obvious advice: - -archutils/ contains arch-specific code. This should contain code -shared by more than one arch/ driver. - -arch/ contains drivers for specific features that can be better -implemented nonportably. Most drivers (all except sound) contain -default, portable implementations, so StepMania should work mostly -out-of-the-box on platforms that are supported by the supporting -libraries (particularly SDL); only a sound driver needs to be -written. - - -Avoid accessing other singleton classes from singleton destructors. That -introduces dependencies on the order of destruction, and can cause problems -if one of the singletons throws an exception. - - -This kills VC: - -template static void YY( T opt ) { } -enum { A } a; -enum { A1 } b; -void XX() { YY(a); YY(b); } - -foo.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT '?YY@@YAXW4__unnamed@@@Z' - -It mangles the template incorrectly. Solution: don't use anonymous -enums as template parameters; give them a name. - +Bits of possibly less-than-obvious advice: + +archutils/ contains arch-specific code. This should contain code +shared by more than one arch/ driver. + +arch/ contains drivers for specific features that can be better +implemented nonportably. Most drivers (all except sound) contain +default, portable implementations, so StepMania should work mostly +out-of-the-box on platforms that are supported by the supporting +libraries (particularly SDL); only a sound driver needs to be +written. + + +Avoid accessing other singleton classes from singleton destructors. That +introduces dependencies on the order of destruction, and can cause problems +if one of the singletons throws an exception. + + +This kills VC: + +template static void YY( T opt ) { } +enum { A } a; +enum { A1 } b; +void XX() { YY(a); YY(b); } + +foo.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT '?YY@@YAXW4__unnamed@@@Z' + +It mangles the template incorrectly. Solution: don't use anonymous +enums as template parameters; give them a name. + diff --git a/Docs/SMLanProtocol.txt b/Docs/SMLanProtocol.txt index af383a6778..6a206cbade 100644 --- a/Docs/SMLanProtocol.txt +++ b/Docs/SMLanProtocol.txt @@ -1,455 +1,455 @@ - -PRELIMINARY - - - - - - - - 05/03/2004 -Protocol version 4 - But 0x04 will be its version for inter-protocol purposes. - -This protocol is only intended to replace current protocol. Because current protocol -not expanable - -SMLAN PROTCOL TCP/8765 - -Protcol is entirelly packaged in EzSockets Data Packets (use send and receive packet) - -This will prevent any out-of-sync errors with future or past versions. - -The protocol is impervious to fragmented, or bonded TCP packets. - -Basic Representation: - -Octet 0123 4 5 - +----+-+---//--+ - |ssss|C|Payload| - +----+-+---//--+ - -ssss - size of packet, handled by ezsockets (if you're using C++) -C - Command. -Payload - variable size based on command - -The payload may contain more data than expected, i.e. new protocol version. - - -In the following protocol, the term size means the size of the chunk of data. -If the "size" is "NT" then that means it's a null-terminating string. - "MSN" most significant 4 bits (byte/16) - "LSN" least significant 4 bits (byte%16) - - -Note: Primary player is 0x0, secondary player is 0x1 - -CLIENT to SERVER protocol: - -000: No Operation - Desc: This command will cause server to respond with a no op response. - Payload: None - Response: Server 001 - -001: No Operation Response - Desc: This command is used to respond to a no operation. - Payload: None - Response: None - -002: Hello - Desc: This is the first packet from a client to server, stating below - information (NOTE: Names are no longer sent in this packet) - Payload: - Size Description: - 1 Client protocol version - NT Name of build of StepMania - Response: Server 002 - - - -003: Game Start Request - Desc: This command is called once after most loading is done, and - again immediately before the sound starts. - Payload: - Size Description - MSN Primary player difficulty (feet) (0 for no player) - LSN Secondary player difficulty (feet) (0 for no player) - MSN Primary player difficulty (0=Beginner, 1=easy, etc.) - LSN Second player difficulty (0=Beginner, 1=easy, etc.) - MSN Start Position (0 is pre-sync, 1 is for sync) - LSN Reserved - NT Song Title - NT Song Subtitle - NT Song Artist - NT Course Title (If none exists; make it just a null) - NT Song Options (in string-format) - NT Primary Player's options (Null if non-existant) - NT Secondary Player's Options (Null if non-existant) - - Response: Server 003 - - -004: Game Over Notice - Desc: This command is sent when end of game is encounterd - Payload: None. - Response: None. - -005: Game Status update - Desc: Updates game info for each step - Payload: - Size Description - MSN Player # -Protocol <= 2 - LSN StepID - 1: Miss - 2: W5 - 3: W4 - 4: W3 - 5: W2 - 6: W1 - 7: LetGo - 8: Held -Protocol >= 3 - LSN StepID - 1: HitMine - 2: AvoidMine - 3: Miss - 4: W5 - 5: W4 - 6: W3 - 7: W2 - 8: W1 - 9: LetGo - 10: Held - - MSN Projected Grade (StepMania enum int) - LSN Reserved - 4 Net-order long containing score. - 2 Net-order int containing combo. - 2 Net-order int containing health. - 2 Net-order # containing offset - 32767 would be DEAD on the note - If the user is hitting late, the # will be higher - It if the user is exactly 0.25 seconds off, the - number will be different by 500, if 0.5, it will be - different by 1000. - Response: None. - -006: Style Update (PLEASE NOTE THIS HAS NOTHING TO DO WITH SERVER COMMAND 6) - Desc: This is sent when a style is chosen. - Size: - 1 # of enabled players (1 means 1, 2 means 2) - 1 Player # (0 means 1st, 1 means 2nd) - NT Player Name for # - (Additional player's and #'s) (enabled players ONLY) - - Response: None - -007: Chat message - Desc: The user typed a message for general chat. - Size: - NT Message - -008: Request Start Game and Tell server existance/non existance of song. - Desc: The user selected a song on a Net-enabled selection - Size: - 1 Usage of message - 0: (in response to server 8) User has specified song - 1: (in response to server 8) User does NOT have specified song - 2: User requested a start game on given song - NT Song Title (As gotten by GetTranslitMainTitle) - NT Song Artist (As Gotten by GetTranslitArtist) - NT Song Subtitle (As gotten by GetTranslitSubTitle) - -009: //Reserved - -010: User entered/exited Network Music Selection Screen - Size: - 1 - 0: exited ScreenNetSelectMusic - 1: entered ScreenNetSelectMusic - 2: **Not Sent** - 3: entered options screen - 4: exited the evaluation screen - 5: entered evaluation screen - 6: exited ScreenNetRoom - 7: entered ScreenNetRoom - -011: User has changed player options - Size: - NT Player 0's options - NT Player 1's options - - -012: SMOnline Packet. //SPECIAL CASE!!! - NOTE: The smonline packet is not defined here. - The SMLan packet 12 is a wrapper for the SMOnline packet. - This is so that we can have "protection" of sorts when - it comes to the coding of SMOnline, so we don't have to - use the lower level commands when dealing with SMOnline. - Size: - 1 SMOnline command //This used to say 2, but it looks like 1 in all cases - SMOnline data - - -013: Reserved - -SERVER to CLIENT protocol: (begins at 128) - -NOTE: Server responses always add 128, thus a server response for no operation - is 128, not 000 - -000(128):No Operation - Desc: This command will cause server to respond with a no op response. - Payload: None - Response: Server 001 - -001(129):No Operation Response - Desc: This command is used to respond to a no operation. - Payload: None - Response: None - -002(130):Server Hello Response - Desc: This introduces the server. - Payload: - Size Description - 1 Server protocol version //NOTE: if protocol version is 128+, then this - server is an SMOnline server - NT Server Name - 4 Random key ( at the moment only used for an alternate login method ) - -003(131):Allow Start - Desc: This will cause the client to start the game. - Payload: None - Response: None - -004(132):Game over stats - Desc: this packet is send in response to the game over packet - it contains information regarding how well each player did. - Payload: - 1 # of players sent in this packet (active players) - The way this works is to send every player's info for a given - field. Like every player's score will be sent first, then every - player's grade. - 1 First player's player ID - - 4 Score - - 1 Grade - - 1 Difficulty (0=beginner, 1=light, etc.) - - - #this next chunk of step types is actually reversed - 2 miss - - 2 boo - - 2 good (All players) - 2 great (All players) - 2 perfect (All players) - 2 marvelous (All players) - - 2 ok (All players) - 2 max_combo (All players) - NT Player's options - - - -005:(133)Scoreboard update - Desc: This will update the client's scoreboard. - Payload: - Size - 1 Which section - 0: Names - 1: Combos - 2: Projected Grades - 1 # of players to display - - If Names, then: - 1 Player in first place's index - 1 Player in second place's index - ... - 1 Last player's index - If Combos, then: - 2 First player's combo - 2 Second Player's combo - ... - 2 Last player's combo - If Project grades - 1 Player 1's grade (in the same format used when reporting projected grades) - 1 Player 2's grade - ... - 1 Last player's projected grade - - -006:(134)System Message (PLEASE NOTE THIS HAS NOTHING TO DO WITH CLIENT COMMAND 6) - Desc: Send system message to user - Payload: - Size Description - NT Message - -007:(135)Chat Message - Desc: Add a chat message to the chat window on some StepMania screens. - Payload: - Size Description - NT Message - -008:(136)Tell client to start song/ask if client has song - Desc: The user selected a song on a Net-enabled selection - Size: - 1 Usage of message - 0: See if client has song - 1: See if client has song, if so, scroll to song - 2: See if client has song, if so, scroll to song, and play that song - 3: Blindly start song - NT Song Title (As gotten by GetTranslitMainTitle) - NT Song Artist (As Gotten by GetTranslitArtist) - NT Song Subtitle (As gotten by GetTranslitSubTitle) - -009:(137)Update user list - Desc: This sends all the users currently connected - Size: - 1 Max # of players - 1 # of players in this packet - 1 Player 0's status - NT Player 0's name (if there is no player here... make it a null ("")) - 1 Player 1's status - NT Player 1's name - ... - 1 Last player's status - NT Last player's name - Status: - 0 Inative (no info on this user yet) - 1 Active (you know who it is) - 2 In Selection Screen - 3 In Options - 4 In Evaluation - -010:(138)Force change to Networking select music screen. - Size: - NT Set Specified gametype - NT Set Specified style - -011:(139)Reserved - - -012:(140)SMOnline Packet. //SPECIAL CASE!!! - NOTE: The smonline packet is not defined here. - The SMLan packet 12 is a wrapper for the SMOnline packet. - This is so that we can have "protection" of sorts when - it comes to the coding of SMOnline, so we don't have to - use the lower level commands when dealing with SMOnline. - Size: - 1 SMOnline command - SMOnline data - - -013:(141)Formatted information packet - Desc: Send formatted information regarding the server back to the player. - NOTE: The purpose of this function is alternatively to be a broadcast - packet. (You can expect it via UDP broadcast) - Size: - NT Server Name - 2 Port the server is listening on - 2 Number of players connected - -014:(142)Attack Client - Size: - 1 Player Number - 4 Time to Last (in MS) - NT Text describing modifiers. - ----------------------------------------------------------------- -Client SMOnline packets: -000: Send Login Information - Size: - 1 Player Number - 1 Encryption text - 0: MD5 hash - 1: MD5 ( MD5 hash + salt ) (salt is plain text, base 10 string ) - NT Username - NT Password - - Note: The client is not permitted to use method (1) for authentication - if the salt it received from the server is 0 - -001: User asks to enter room - Size: - 1 Enter/Exit? - 0: User wishes to exit room - 1: User wishes to enter room - NT Room Name (Used when entering rooms) - NT Password (Empty if password not used) - -002: Create a new Room - Size: - 1 Room Type - 0: Normal room (has sub rooms) - 1: Game room (no sub rooms) - NT Room Title - NT Room Description - NT Room Password (blank if no password) - -003: Requests Room Info - Size: - NT Room Name - - -Server SMOnline packets: -000: Login Response - 1 Approval Status - 0: Approved - 1: Approval Failed - NT Login response (plain text) - -001: Room Update (Changing rooms) - Size: - 1 Type of update - 0: Change Room Title - 1: Update List of other rooms (or games) - - If Room Title Update: - NT Room Title - NT Room Description - 1 Type of room: - 0: Chat room - 1: Game room - 1 Allows creation of sub room. - 0: Does not allow creation of subrooms - 1: Allows creation of subrooms - - If Room List Update: - 1 Number of rooms - NT Room1 Title - NT Room1 Description - NT Room2 Title - NT Room2 Description - ... - NT RoomN Title - NT RoomN Description - - Room Status appended for reverse compatibility - 1 Room1 Status - 0: Normal Room - 1: Unused - 2: Room in game - 3: First stage of song selection has been done - 4: Second stage of song selection has been done - 1 Room2 Status - ... - 1 RoomN Status - - Room Flags appended for reverse compatibility - 1 Room1 Flags - bit 0: Passworded if true - 1 Room2 Status - ... - 1 RoomN Status - -002: Request general information from server. - 1 Format for stats - 0: Normal unformatted stats - -003: Room Info - Size: - NT Last Song Title - NT Last Song Subtitle - NT Last Song Artist - 1 Num Players - 1 Max Players - NT Player1 Name - ... - NT PlayerN Name + +PRELIMINARY - - - - - - - - 05/03/2004 +Protocol version 4 + But 0x04 will be its version for inter-protocol purposes. + +This protocol is only intended to replace current protocol. Because current protocol +not expanable + +SMLAN PROTCOL TCP/8765 + +Protcol is entirelly packaged in EzSockets Data Packets (use send and receive packet) + +This will prevent any out-of-sync errors with future or past versions. + +The protocol is impervious to fragmented, or bonded TCP packets. + +Basic Representation: + +Octet 0123 4 5 + +----+-+---//--+ + |ssss|C|Payload| + +----+-+---//--+ + +ssss - size of packet, handled by ezsockets (if you're using C++) +C - Command. +Payload - variable size based on command + +The payload may contain more data than expected, i.e. new protocol version. + + +In the following protocol, the term size means the size of the chunk of data. +If the "size" is "NT" then that means it's a null-terminating string. + "MSN" most significant 4 bits (byte/16) + "LSN" least significant 4 bits (byte%16) + + +Note: Primary player is 0x0, secondary player is 0x1 + +CLIENT to SERVER protocol: + +000: No Operation + Desc: This command will cause server to respond with a no op response. + Payload: None + Response: Server 001 + +001: No Operation Response + Desc: This command is used to respond to a no operation. + Payload: None + Response: None + +002: Hello + Desc: This is the first packet from a client to server, stating below + information (NOTE: Names are no longer sent in this packet) + Payload: + Size Description: + 1 Client protocol version + NT Name of build of StepMania + Response: Server 002 + + + +003: Game Start Request + Desc: This command is called once after most loading is done, and + again immediately before the sound starts. + Payload: + Size Description + MSN Primary player difficulty (feet) (0 for no player) + LSN Secondary player difficulty (feet) (0 for no player) + MSN Primary player difficulty (0=Beginner, 1=easy, etc.) + LSN Second player difficulty (0=Beginner, 1=easy, etc.) + MSN Start Position (0 is pre-sync, 1 is for sync) + LSN Reserved + NT Song Title + NT Song Subtitle + NT Song Artist + NT Course Title (If none exists; make it just a null) + NT Song Options (in string-format) + NT Primary Player's options (Null if non-existant) + NT Secondary Player's Options (Null if non-existant) + + Response: Server 003 + + +004: Game Over Notice + Desc: This command is sent when end of game is encounterd + Payload: None. + Response: None. + +005: Game Status update + Desc: Updates game info for each step + Payload: + Size Description + MSN Player # +Protocol <= 2 + LSN StepID + 1: Miss + 2: W5 + 3: W4 + 4: W3 + 5: W2 + 6: W1 + 7: LetGo + 8: Held +Protocol >= 3 + LSN StepID + 1: HitMine + 2: AvoidMine + 3: Miss + 4: W5 + 5: W4 + 6: W3 + 7: W2 + 8: W1 + 9: LetGo + 10: Held + + MSN Projected Grade (StepMania enum int) + LSN Reserved + 4 Net-order long containing score. + 2 Net-order int containing combo. + 2 Net-order int containing health. + 2 Net-order # containing offset + 32767 would be DEAD on the note + If the user is hitting late, the # will be higher + It if the user is exactly 0.25 seconds off, the + number will be different by 500, if 0.5, it will be + different by 1000. + Response: None. + +006: Style Update (PLEASE NOTE THIS HAS NOTHING TO DO WITH SERVER COMMAND 6) + Desc: This is sent when a style is chosen. + Size: + 1 # of enabled players (1 means 1, 2 means 2) + 1 Player # (0 means 1st, 1 means 2nd) + NT Player Name for # + (Additional player's and #'s) (enabled players ONLY) + + Response: None + +007: Chat message + Desc: The user typed a message for general chat. + Size: + NT Message + +008: Request Start Game and Tell server existance/non existance of song. + Desc: The user selected a song on a Net-enabled selection + Size: + 1 Usage of message + 0: (in response to server 8) User has specified song + 1: (in response to server 8) User does NOT have specified song + 2: User requested a start game on given song + NT Song Title (As gotten by GetTranslitMainTitle) + NT Song Artist (As Gotten by GetTranslitArtist) + NT Song Subtitle (As gotten by GetTranslitSubTitle) + +009: //Reserved + +010: User entered/exited Network Music Selection Screen + Size: + 1 + 0: exited ScreenNetSelectMusic + 1: entered ScreenNetSelectMusic + 2: **Not Sent** + 3: entered options screen + 4: exited the evaluation screen + 5: entered evaluation screen + 6: exited ScreenNetRoom + 7: entered ScreenNetRoom + +011: User has changed player options + Size: + NT Player 0's options + NT Player 1's options + + +012: SMOnline Packet. //SPECIAL CASE!!! + NOTE: The smonline packet is not defined here. + The SMLan packet 12 is a wrapper for the SMOnline packet. + This is so that we can have "protection" of sorts when + it comes to the coding of SMOnline, so we don't have to + use the lower level commands when dealing with SMOnline. + Size: + 1 SMOnline command //This used to say 2, but it looks like 1 in all cases + SMOnline data + + +013: Reserved + +SERVER to CLIENT protocol: (begins at 128) + +NOTE: Server responses always add 128, thus a server response for no operation + is 128, not 000 + +000(128):No Operation + Desc: This command will cause server to respond with a no op response. + Payload: None + Response: Server 001 + +001(129):No Operation Response + Desc: This command is used to respond to a no operation. + Payload: None + Response: None + +002(130):Server Hello Response + Desc: This introduces the server. + Payload: + Size Description + 1 Server protocol version //NOTE: if protocol version is 128+, then this + server is an SMOnline server + NT Server Name + 4 Random key ( at the moment only used for an alternate login method ) + +003(131):Allow Start + Desc: This will cause the client to start the game. + Payload: None + Response: None + +004(132):Game over stats + Desc: this packet is send in response to the game over packet + it contains information regarding how well each player did. + Payload: + 1 # of players sent in this packet (active players) + The way this works is to send every player's info for a given + field. Like every player's score will be sent first, then every + player's grade. + 1 First player's player ID + + 4 Score + + 1 Grade + + 1 Difficulty (0=beginner, 1=light, etc.) + + + #this next chunk of step types is actually reversed + 2 miss + + 2 boo + + 2 good (All players) + 2 great (All players) + 2 perfect (All players) + 2 marvelous (All players) + + 2 ok (All players) + 2 max_combo (All players) + NT Player's options + + + +005:(133)Scoreboard update + Desc: This will update the client's scoreboard. + Payload: + Size + 1 Which section + 0: Names + 1: Combos + 2: Projected Grades + 1 # of players to display + + If Names, then: + 1 Player in first place's index + 1 Player in second place's index + ... + 1 Last player's index + If Combos, then: + 2 First player's combo + 2 Second Player's combo + ... + 2 Last player's combo + If Project grades + 1 Player 1's grade (in the same format used when reporting projected grades) + 1 Player 2's grade + ... + 1 Last player's projected grade + + +006:(134)System Message (PLEASE NOTE THIS HAS NOTHING TO DO WITH CLIENT COMMAND 6) + Desc: Send system message to user + Payload: + Size Description + NT Message + +007:(135)Chat Message + Desc: Add a chat message to the chat window on some StepMania screens. + Payload: + Size Description + NT Message + +008:(136)Tell client to start song/ask if client has song + Desc: The user selected a song on a Net-enabled selection + Size: + 1 Usage of message + 0: See if client has song + 1: See if client has song, if so, scroll to song + 2: See if client has song, if so, scroll to song, and play that song + 3: Blindly start song + NT Song Title (As gotten by GetTranslitMainTitle) + NT Song Artist (As Gotten by GetTranslitArtist) + NT Song Subtitle (As gotten by GetTranslitSubTitle) + +009:(137)Update user list + Desc: This sends all the users currently connected + Size: + 1 Max # of players + 1 # of players in this packet + 1 Player 0's status + NT Player 0's name (if there is no player here... make it a null ("")) + 1 Player 1's status + NT Player 1's name + ... + 1 Last player's status + NT Last player's name + Status: + 0 Inative (no info on this user yet) + 1 Active (you know who it is) + 2 In Selection Screen + 3 In Options + 4 In Evaluation + +010:(138)Force change to Networking select music screen. + Size: + NT Set Specified gametype + NT Set Specified style + +011:(139)Reserved + + +012:(140)SMOnline Packet. //SPECIAL CASE!!! + NOTE: The smonline packet is not defined here. + The SMLan packet 12 is a wrapper for the SMOnline packet. + This is so that we can have "protection" of sorts when + it comes to the coding of SMOnline, so we don't have to + use the lower level commands when dealing with SMOnline. + Size: + 1 SMOnline command + SMOnline data + + +013:(141)Formatted information packet + Desc: Send formatted information regarding the server back to the player. + NOTE: The purpose of this function is alternatively to be a broadcast + packet. (You can expect it via UDP broadcast) + Size: + NT Server Name + 2 Port the server is listening on + 2 Number of players connected + +014:(142)Attack Client + Size: + 1 Player Number + 4 Time to Last (in MS) + NT Text describing modifiers. + +---------------------------------------------------------------- +Client SMOnline packets: +000: Send Login Information + Size: + 1 Player Number + 1 Encryption text + 0: MD5 hash + 1: MD5 ( MD5 hash + salt ) (salt is plain text, base 10 string ) + NT Username + NT Password + + Note: The client is not permitted to use method (1) for authentication + if the salt it received from the server is 0 + +001: User asks to enter room + Size: + 1 Enter/Exit? + 0: User wishes to exit room + 1: User wishes to enter room + NT Room Name (Used when entering rooms) + NT Password (Empty if password not used) + +002: Create a new Room + Size: + 1 Room Type + 0: Normal room (has sub rooms) + 1: Game room (no sub rooms) + NT Room Title + NT Room Description + NT Room Password (blank if no password) + +003: Requests Room Info + Size: + NT Room Name + + +Server SMOnline packets: +000: Login Response + 1 Approval Status + 0: Approved + 1: Approval Failed + NT Login response (plain text) + +001: Room Update (Changing rooms) + Size: + 1 Type of update + 0: Change Room Title + 1: Update List of other rooms (or games) + + If Room Title Update: + NT Room Title + NT Room Description + 1 Type of room: + 0: Chat room + 1: Game room + 1 Allows creation of sub room. + 0: Does not allow creation of subrooms + 1: Allows creation of subrooms + + If Room List Update: + 1 Number of rooms + NT Room1 Title + NT Room1 Description + NT Room2 Title + NT Room2 Description + ... + NT RoomN Title + NT RoomN Description + + Room Status appended for reverse compatibility + 1 Room1 Status + 0: Normal Room + 1: Unused + 2: Room in game + 3: First stage of song selection has been done + 4: Second stage of song selection has been done + 1 Room2 Status + ... + 1 RoomN Status + + Room Flags appended for reverse compatibility + 1 Room1 Flags + bit 0: Passworded if true + 1 Room2 Status + ... + 1 RoomN Status + +002: Request general information from server. + 1 Format for stats + 0: Normal unformatted stats + +003: Room Info + Size: + NT Last Song Title + NT Last Song Subtitle + NT Last Song Artist + 1 Num Players + 1 Max Players + NT Player1 Name + ... + NT PlayerN Name diff --git a/Docs/SimfileFormats/BMS/BM98Data_format_specification.html b/Docs/SimfileFormats/BMS/BM98Data_format_specification.html new file mode 100644 index 0000000000..4ab9afd3a7 --- /dev/null +++ b/Docs/SimfileFormats/BMS/BM98Data_format_specification.html @@ -0,0 +1,159 @@ + + + + + +BM98Data_format_specification + + + + +

BMS +Format Specification

+ +

written by Urao Yane(yaneurao@sun-inet.or.jp)

+ +

"BMS" means a Be-Music Source file. A file which has +BMS suffix is regarded as the BMS file. This file format was +produced by Urao Yane and NBK in 1998. And I adopted this file +format to BM98. Now,anyone can use this format freely.

+ +

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

+ +

<Command Line>

+ +

The line begining at '#' is the command line. All the rest are +ignored (use for comments). And this BMS file is compiled at +runtime , so you can order any lines freely. And there is no +difference in the command line between using a capital letter or +not.

+ +

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

+ +

<Header>

+ +

#PLAYER 1
+This data is for Single Play.

+ +

#PLAYER 2
+This data is for Two Play.

+ +

#PLAYER 3
+This data is for Double Play.

+ +

#GENRE xxxxxxxx
+Definition of Genre.

+ +

#TITLE xxxxxxxx
+Definition of Title.

+ +

#ARTIST xxxxxxxx
+Definition of Artist.

+ +

#BPM xxx
+Definition of BPM.(Beat Per Minite) at the top of music. default +: 130

+ +

#MIDIFILE xxxxxxx.mid
+Background music by MIDI.

+ +

#PLAYLEVEL x
+Information of Game Level for player.

+ +

#RANK x
+judgement level.
+x = 0 :very hard, 1: hard, 2: normal, 3: easy

+ +

@

+ +

#VOLWAV xxx
+relative volume control (percentage)

+ +

#WAVxx yyyyyyyy.wav
+definition of Wave Data. xx : 01 to FF (Hex) , yyyyyyyy.wav : +wave file name

+ +

e.g.
+#WAV01 HOUSE01.WAV // assign HOUSE01.WAV to 01 wav
+#WAV02 HOUSE02.WAV // assign HOUSE02.WAV to 02 wav
+#WAVFF HOUSE03.WAV // assign HOUSE03.WAV to FF wav

+ +

#BMPxx yyyyyyyy.bmp
+definition of Bitmap file. xx : 01 to FF(Hex) , yyyyyyyy.bmp : +bitmap file name
+Bitmap size must be 256 * 256.(max color 65536)

+ +

e.g.
+#BMP01 HOUSE01.BMP // assign HOUSE01.BMP to 01 bitmap
+#BMP02 HOUSE02.BMP // assign HOUSE02.BMP to 02 bitmap
+#BMPEE HOUSE03.BMP // assign HOUSE03.BMP to EE bitmap
+

+ +

But ,the bitmap defined by #BMP00 is something special.
+This bitmap shows when a player do a poor play.

+ +

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

+ +

// a sample of random loading function

+ +

#random 2 // create a random number (1 or 2)

+ +

#if 1 // if the number was equal to 1 then...
+#00111:31313131 // this is effective...
+#endif

+ +

#if 2 // if the number was equal to 2 then...
+#00113:32003232 // this is effective
+#endif

+ +

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

+ +

<Channel Messages>

+ +

#aaabb:cccccccc

+ +

aaa: track number (from 000 to 999)
+bb : channel number where you want to send message.(from 00 to +FF)
+cccccccc : <message>

+ +

<a brief Channel Number>

+ +

01 : BGM(background music by WAVE)
+03 : changing a Tempo
+04 : BGA(background animation)
+06 : changing Poor-bitmap
+11 to 17 : Object Channel of 1 player side
+21 to 27 : Object Channel of 2 player side
+

+ +

<Example>

+ +

#00211:03030303
+This means 4 objects at the left of 1 player side in 002 track. +This object is assigned to wave No.03 which was defined by #WAV03 +xxxx.wav. And this 4 objects are arranged evenly +in this track.

+ +

Please try the following patterns.

+ +

#00211:0303030303

+ +

#00211:0303000303

+ +

#00211:010101
+#00211:00020202

+ +

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

+ +

This document and this format is free!
+I hope the day will come when my BMS format will use all over the +world.

+ +

Urao Yane

+ +

back to my +homepage

+ + diff --git a/Docs/SimfileFormats/BMS/BM98FinalSecret.html b/Docs/SimfileFormats/BMS/BM98FinalSecret.html new file mode 100644 index 0000000000..4a7e02c83b --- /dev/null +++ b/Docs/SimfileFormats/BMS/BM98FinalSecret.html @@ -0,0 +1,564 @@ + + + + + +BM98FinalSecret + + + + +

alXWer

+ +

alXWŌ̔閧Ƃ́Ad +b@\AȂ킿AQ[̃LN^[ׂĂalrt@CŕύX@\łB

+ +

A̋@\́Ag[̂̂ɂȂ莟AJ悤ƎvĂ̂A낢뎖āAalXŴ̂̊J؂邱ƂɂȂA̖ڂ邱Ƃ̂ȂȂ@\łB

+ +

ŁA̋@\gȂ́Aalq̕ł͕̓ۏ؂łȂB܂BM98ver3.18pƂĔFĂB܂Aȍ~̃o[WŁAɂ̂́Arbg}bvt@CĂ̂ŁÃeLXg̓ěł͂ȂB

+ +

܂A{IɂalXWɂ‚āA˂炨͈؃T|[gȂƌĂ̓lA̓eɂ‚ĂA؃T|[gȂ̂ŁA⃁[͊قĂقB

+ +

ꂩAXvCgio[AalXWŗL̒萔oĂ邪ÁAalqƂ͈ؖłB

+ +

@

+ +

@

+ +

܂A̋@\̂ƂwvłGĂ̂ŁA𔲐B

+ +

--------------------------------------------------

+ +

Extended Character (BM98 v3.18ȍ~)@J@\

+ +

ȉ́A˂炨̃Ƃli΁j

+ +

EQ[̔Cӂ̃XvCg[U[`@\B

+ +

#ExtChr <SpriteNo.> <BMPNo.>

+ +

<start_x> <start_y> <end_x> <end_y>

+ +

{ <offset_x> <offset_y> { <x> <y> } }

+ +

ʗAExtended Object@\Ƃ𕹗pĎgB

+ +

XvCgNo.ƃLN^No.Ƃ͈ӖႤB--------------------------------------------------

+ +

܂AExtended Object@\ƕpĎgƏĂ邪A‚́Aǂɂ邩ƂƁA`lio[05Ԃ̂Ƃɂ菑ĂB

+ +

--------------------------------------------------

+ +

05@@ [Extended Object]@J@\

+ +

@@ĂIuWFʂ̃LN^[io[̂̂ɂւ@\B̍s̉ɂs̃IuWFɏԂɊUB

+ +

--------------------------------------------------

+ +

̃`lio[̎̍sɏĂIuWFzuf[^ɑ΂āA‚Lł邱Ƃ͂킩邪ALN^[ƂĉǂΗǂ̂Aꂪ܂ĕsmłB

+ +

ƁA˂炨悭͊oĂȂi΁j

+ +

Ȃ񂩁ÂƂ́A{̋Ȃ`[tɁAȂɕҋȂsȂĂāÂƂPIN^[ũsAmՂoĂalrt@C‚ŁAȋ@\‚o͂B

+ +

Ȃ킯ŁAƃ\[XeLXg`Ă݂悤B

+ +

int ExtChr[] = {
+0,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,
+// 0x [U[`”\
+976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,
+// 1x@ [U[`”\
+992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,
+// 2x [U[`”\
+1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,
+// 3x
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+// 4x
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+// 5x
+941,942,943,944,945,946,947,948,949,950,951, 0, 0, 0, 0, 0,
+// 6x FIuWF5p^[ ԁ@΁@D@BM98FiVIuWFj
+730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,
+// 7x A B C D E F G H I J K L M N O P
+746,747,748,749,750,751,752,753,754,755,760,761,762,763,764,765,
+// 8x Q R S T U V W X Y Z a b c d e f
+766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,
+// 9x g h i j k l m n o p q r s t u v
+782,783,784,785,790,791,792,793,794,795, 0, 0, 0, 0, 0, 0,
+// ax w x y z - " ! ? & .
+800,801,805,806,807,808,810,811,812,910,911,912,913,940, 0, 0,
+// bx BM ںSong SP DP BPM @ 1P 2P 1Pd +2Pd c
+850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,
+// cx A B C D E F G H I J K L M N O P
+866,867,868,869,870,871,872,873,874,875,876,877,878,879,890,891,
+// dx Q R S T U V W X Y Z / . ! % @ ?
+720,721,722,723,724,725,726,727,728,729, 0, 0, 0, 0, 0, 0,
+// ex 0 1 2 3 4 5 6 7 8 9
+880,881,882,883,884,885,886,887,888,889, 0, 0, 0, 0, 0, 0
+// fx 0 1 2 3 4 5 6 7 8 9
+};
+

+ +

[ƂŁAOT`lɃf[^𑗐M邱ƂŁAOP`ee܂ŁAQTTނ̃LN^\邪ł킯AꂪԂ̃XvCgɑΉ̂ł邩́A̕\ΈڗđRBiA˂炨ɂ̂݁F΁j

+ +

Ƃ΁ALN^io[OṔAXvCgio[XUPłBi[U[`”\j
+܂ALN^[io[TÓAXvCgio[XSPłA͋FIuWFłB
+͂܂ALN^[io[cQ́AXvCgio[WUVłÁAqƂłB

+ +

Ƃ悤ɂȂĂBƂƂŁÁAT`lŁAgLN^ƂāAȂǂIuWFƂė邱ƂłB

+ +

ɁAŁAƂȂ̂́AXvCgio[961`1023[U[`”\ƂĉĂ邱ƂłBɗāAقǂ

+ +

#ExtChr <SpriteNo.> <BMPNo.> <start_x> +<start_y> <end_x> <end_y>@{ <offset_x> +<offset_y> { <x> <y> } }

+ +

߂ĈӖB{ +}̕͏ȗ”\ƂƁB

+ +

#ExtChr 961 1 0 0 99 99

+ +

ȂǂƂ΁AXvCgio[XUPArbg}bvio[PíA#bmpŒ`Ƃ̃rbg}bvio[j́iOCOjiXXCXXĵPOO~POOhbg̕ƂĒ`ƂӖłBɂA[U[ŗpӂCӂ̃rbg}bv̓̕[U[XvCgƂĒ`邱Ƃ”\ƂȂAقǂExtended +Objectŕ\邱Ƃ”\Ƃ킯BiƂ܎voF΁j

+ +

āA<offset_x> <offset_y>IvVŎwł邪ÁAIuWFʒu𒲐邽߂ɂB

+ +

Ƃ΁AIuWF\ƂAIuWF\iKŎQƂāÃIuWF̉ʂɃvC|Cg悤ɂ̂́A܂ꂽvOł͂ȂƂ˂炨͍l킯B̂AۂՂ̈ڐÂƂɂ̂ŁAIuWFNg̉ʂvC|CgłȂƂ肤邱Ƃ𑽏ӎĂ̂B

+ +

ŁAItZbg邱ƂɂBƂ΁Ai|TC|POj̃ItZbgƒXvCgɑ΂ẮAiPOOCPQOj̍Wɕ\ȂAƖ߂ĂiXTCPPOj̍Wɕ\킯łB̂悤ɂ邱ƂɂāAIɂ́AiPOOCPQOj̍WŊǗłBȂ킿AvC|Cgɕ\悤ɎwĂ΁ÃXvCg\̒iKŁAK؂ȃItZbg𓾂āAK؂Ȉʒuɕ\Ƃdg݂łB

+ +

ÂƂɋCÂ̂́ARDPUȂ̂ŁAXNb`͎̓ItZbgĂȂBiƎvj@̒sȂ߂ɂÃItZbgl͏dvłB

+ +

Ō̃IvV̂wCxA̎w肪ƁAʏ́A̍Wʒuɂ̃XvCgzûłBՂ̃fUCύXADanceDanceRevolution̂悤ɂ؂Ƒ傫Ȗpӂ肷邱Ƃ̉”\B܂Aܒ`ĂXvCgォ`āAʊOɒǂoA\Ȃ悤ɂ邱ƂłB

+ +

@

+ +

킭킭ĂƂŁAǂ̃XvCgio[ł̂ÅtSɒm肽Ǝvl邾낤BłȂ΁A܂錮Ղʂ̃LN^ɍĒ`Ă܂Ƃ悤ȂƂłȂłB

+ +

ŁAȉɂ́AXvCg`̂߂̃[`̂܂ܔB̂悤ɂāAԂł邩LĂBAdynamicƏĂ镔́AIɕύX邩A‚ςĂʂłB܂AXvCǵAIɂO`TPP܂ł\̂ŁAƂTPQ`POQŔA\łāAsiKŁAPOԂ̃XvCg͂TPRԂ̃XvCgRs[IȂǂƂāAPOԂɃXvCgĂāAPOԂ̃XvCgʕ\邱ƂɂATPRԂ̃XvCgʕ\邱ƂɂĂB̂悤ɂ邱ƂɂAނ̃XvCg𕡐•\肷邱ƂȒPɂȂ邵AǗ̎ԂyɂȂB

+ +

A₵āATPQ‚ł͑ȂȂ߁AlI\pɂPOQS`POWVgĂ悤ȋCBiȂ񂩃_TCȂDDDj

+ +

܂Âւ͓ˊэHȂ̂Ő[͂‚܂Ȃ悤Ɂi΁j

+ +

@

+ +

void DefSpriteGames(void) // +Q[ʂ̂߂̃XvCg
+{
+int i;
+for(i=0;i<512*2+64;i++) {
+ySpriteMove(i,-10000,-10000); // SNA
+ySpriteVisible(i,true);
+}
+
+// 00 - 11 : (dynamic sprite) Great̔Ajp
+// 12-75 : Score\p (61-76 : AutoPlay\p)
+// 71-75 : (dup.) CPU % ח\p
+
+// 77-79 : 󂫂̂͂DD
+
+// 80,81,82,83,84,85,86,87,88 : 1P̌ՃtbVXNb`
+// 89,90,91,92,93,94,95,96,97 : 2P̌ՃtbVXNb`
+
+// kazu:ĂL[{[ȟ•ʃp[cB
+yDefSprite(80,112,1,123,25); // Pi㕔j
+ySpriteMove(80,SCR1P1+1,SCRDWN3-1);
+yDefSprite(81,112,26,133,46); // Pij
+ySpriteMove(81,SCR1P1+1,SCRDWN3+25-1);
+
+yDefSprite(82,124,1,140,25); // Q
+ySpriteMove(82,SCR1P2+2,SCRDWN3);
+
+yDefSprite(83,141,1,146,25); // Ri㕔j
+ySpriteMove(83,SCR1P3+8,SCRDWN3-1);
+yDefSprite(84,133,26,154,46); // Rij
+ySpriteMove(84,SCR1P3+1,SCRDWN3+25-1);
+
+yDefSprite(85,147,1,163-1,25); // S
+ySpriteMove(85,SCR1P4+4,SCRDWN3);
+
+yDefSprite(86,164-2,1,175,25); // Ti㕔j
+ySpriteMove(86,SCR1P5+9,SCRDWN3-1);
+yDefSprite(87,154,26,175,46); // Tij
+ySpriteMove(87,SCR1P5+1,SCRDWN3+25-1);
+
+yDefSprite(88,177,2,210,46); // XNb`
+ySpriteMove(88,SCR1P6+2,SCRDWN3);
+
+for(i=80;i<=88;i++){
+ySpriteCopy(i+9,i); // ȁ[:p
+ySpriteAdd(i+9,SCROFS,0); // XvCgΈړ
+}
+
+// 98,99 : ʉ̃L[{[hiԃCj
+yDefSprite(98,1,1+5,100,89); // for 1P +m[}L[{[hiŚBXNb`܂ށj
+ySpriteCopy(99,98); // for 2P
+
+// 100-309 : (dynamic sprite) m[gBPʓ200Ƃ͂痈
+
+// 310,311 : 1P & 2P "Great / Good / Bad / Poor "
+// NoteSprite.h +ŎgAAg_B
+
+// 312-315 : "1P","2P"
+
+// 316 - 325 : cߐ (̕D悩...)
+for(i=0;i<10;i++){
+yDefSprite(316+i,64,91,64,91+(SCRDWN>>1)-1);
+}
+ySpriteMove(316,SCR1P3,0); // ړƂႦI
+ySpriteMove(317,SCR1P5,0); // ړƂႦI
+ySpriteMove(318,SCR1P6,0); // ړƂႦI
+ySpriteMove(319,SCR1P3,SCRDWN>>1); // +ړƂႦI
+ySpriteMove(320,SCR1P5,SCRDWN>>1); // +ړƂႦI
+ySpriteMove(321,SCR1P6,SCRDWN>>1); // +ړƂႦI
+
+// 322-7 : 2Ppcߐ
+
+// 328-330 : CPUח
+
+// 331-430 : (dynamic sprite) Voltage Meter
+
+// 431,432,433,434,435,436 : 1P +L[@Ƃ̐Ԃ̏cC
+// 437,438,439,440,441,442 : 2P +L[@Ƃ̐Ԃ̏cC
+for(i=431;i<=442;i++){
+if (i==436 || i==442) {
+yDefSprite(i,65,91,99,91+160-1); // XNb`C
+} else {
+yDefSprite(i,65,91,84,91+160-1); //
+}
+ySpriteVisible(i,false); // +fBtHgł͕sŽH
+}
+ySpriteMove(431,SCR1P1+1,0);
+ySpriteMove(432,SCR1P2+1,0);
+ySpriteMove(433,SCR1P3+1,0);
+ySpriteMove(434,SCR1P4+1,0);
+ySpriteMove(435,SCR1P5+1,0);
+ySpriteMove(436,SCR1P6+1,0);
+for(i=0;i<6;i++){
+ySpriteCopy(437+i,431+i);
+ySpriteAdd(437+i,SCROFS,0);
+}
+
+for(i=0;i<12;i++){
+ySpriteCopy(443+i,431+i);
+ySpriteAdd(443+i,0,SCRDWN>>1);
+}
+
+// 455-497 : for displaying debug message(dup.)
+// (455-486) : ʃt[(`́ABGScr.cpp)
+// (487-497) : INSERT COIN & CREDITS 0/2
+
+// 498-499 : Po^Qỏ̐ԃC
+yDefSprite(498,1,1,100,5); // for 1P +m[}L[{[hiŚBXNb`܂ށj
+// defined BGScr.cpp
+
+// 500-506 : FPS̕\p
+
+// 507 BM
+yDefSprite(507,340,345,426,374); // +alXW^CgSE
+
+// 508-511
+yDefSprite(508,174,48,176,52); // EOp}[N
+yDefSprite(509,178,48,180,52); // Op}[N
+ySpriteCopy(510,509);
+ySpriteCopy(511,510);
+
+/*
+(117,1,121,73) // ߍTCh̐
+(239,1,247,73) // ߉ETCh̐
+*/
+
+// 513-1023 : free@ZRCƂ킸ɍɎgI
+for(i=0;i<4;i++){
+yDefSprite(513+i,112,48+i*6,131,52+i*6); // IuWF
+yDefSprite(523+i,133,48+i*6,152,52+i*6); // IuWF
+yDefSprite(533+i,147,147+i*6,180,151+i*6); // XNb`
+}
+yDefSprite(513+4,208,48,230,53); // +IuWF̂т[
+ySpriteOffset(513+4,-1,-1); // Z^OI
+yDefSprite(513+5,207,48,231,54); // +IuWF̂т[
+ySpriteOffset(513+5,-2,-2);
+
+yDefSprite(523+4,208,56,230,61); // +IuWF̂т[
+ySpriteOffset(523+4,-1,-1);
+yDefSprite(523+5,207,56,231,62); // +IuWF̂т[
+ySpriteOffset(523+5,-2,-2);
+
+yDefSprite(533+4,147,171,180,179); // +XNb`̂т[(1)
+yDefSprite(533+5,147,181,180,190); // +XNb`̂т[(2)
+
+// t[][iPj
+yDefSprite(543,112,102,145,145-4);
+yDefSprite(544,147,102,180,145-4);
+yDefSprite(545,182,102,215,145-4);
+yDefSprite(546,112,147,145,190-4);
+yDefSprite(547,182,147,219,190); // т[ BM98v3.16
+// ySpriteOffset(547,-2,0);
+yDefSprite(548,182,147,219,190); // т[ BM98v3.16
+// ySpriteOffset(548,-2,0);
+
+yDefSprite(553,245,108,307,121); // GREAT
+yDefSprite(554,245,123,307,136); // GOOD
+yDefSprite(555,245,138,307,151); // BAD
+yDefSprite(556,245,153,307,166); // POOR
+
+yDefSprite(557,1,267,100,267); // ߐ
+// ySetSpriteSize(557,120,1);
+
+// ԕ
+for(i=0;i<=9;i++){
+yDefSprite(560+i,245+i*12,168,255+i*12,183); // 0-9
+}
+
+yDefSprite(581,154,48,157,64); // Q[WE΁iÁj
+yDefSprite(582,159,48,162,64); // Q[WE΁ij
+yDefSprite(583,164,48,167,64); // Q[WEԁiÁj
+yDefSprite(584,169,48,172,64); // Q[WEԁij
+
+for(i=0;i<4;i++){
+yDefSprite(700+i,112+i*30,72,140+i*30,100); // GREATAj
+}
+
+// 0-9 , A-Z , a-z ...
+// F̕
+yDefSprite(720,245,89,257,106); // 0
+yDefSprite(721,259,89,265,106); // 1
+yDefSprite(722,267,89,279,106); // 2
+yDefSprite(723,281,89,293,106); // 3
+yDefSprite(724,295,89,309,106); // 4
+yDefSprite(725,311,89,323,106); // 5
+yDefSprite(726,325,89,337,106); // 6
+yDefSprite(727,339,89,351,106); // 7
+yDefSprite(728,353,89,365,106); // 8
+yDefSprite(729,367,89,379,106); // 9
+
+yDefSprite(730,245,1,257,18); // A
+yDefSprite(731,259,1,271,18); // B
+yDefSprite(732,273,1,285,18); // C
+yDefSprite(733,287,1,299,18); // D
+yDefSprite(734,301,1,311,18); // E
+yDefSprite(735,313,1,323,18); // F
+yDefSprite(736,325,1,337,18); // G
+yDefSprite(737,339,1,351,18); // H
+yDefSprite(738,353,1,357,18); // I
+yDefSprite(739,359,1,371,18); // J
+yDefSprite(740,373,1,387,18); // K
+yDefSprite(741,389,1,399,18); // L
+yDefSprite(742,401,1,421,18); // M
+yDefSprite(743,245,20,259,37); // N
+yDefSprite(744,261,20,273,37); // O
+yDefSprite(745,275,20,287,37); // P
+yDefSprite(746,289,20,301,39); // Q
+yDefSprite(747,303,20,315,37); // R
+yDefSprite(748,317,20,327,37); // S
+yDefSprite(749,329,20,341,37); // T
+yDefSprite(750,343,20,355,37); // U
+yDefSprite(751,357,20,369,37); // V
+yDefSprite(752,371,20,391,37); // W
+yDefSprite(753,393,20,405,37); // X
+yDefSprite(754,407,20,419,37); // Y
+yDefSprite(755,245,41,257,58); // Z
+
+yDefSprite(760,259,41,271,58); // a
+yDefSprite(761,273,41,285,58); // b
+yDefSprite(762,287,41,297,58); // c
+yDefSprite(763,299,41,311,58); // d
+yDefSprite(764,313,41,325,58); // e
+yDefSprite(765,327,41,337,58); // f
+yDefSprite(766,339,41,351,62); // g
+yDefSprite(767,353,41,365,58); // h
+yDefSprite(768,367,41,371,58); // i
+yDefSprite(769,373,41,383,62); // j
+yDefSprite(770,385,41,398,58); // k
+yDefSprite(771,400,41,404,58); // l
+yDefSprite(772,406,41,426,58); // m
+yDefSprite(773,245,64,257,81); // n
+yDefSprite(774,259,64,271,81); // o
+yDefSprite(775,273,64,285,85); // p
+yDefSprite(776,287,64,299,85); // q
+yDefSprite(777,301,64,311,81); // r
+yDefSprite(778,313,64,323,81); // s
+yDefSprite(779,325,64,333,81); // t
+yDefSprite(780,335,64,347,81); // u
+yDefSprite(781,349,64,361,81); // v
+yDefSprite(782,363,64,383,81); // w
+yDefSprite(783,385,64,397,81); // x
+yDefSprite(784,399,64,411,87); // y
+yDefSprite(785,413,64,425,81); // z
+
+yDefSprite(790,381,89,391,106); // -
+yDefSprite(791,393,89,399,106); // "
+yDefSprite(792,401,89,405,106); // !
+yDefSprite(793,407,89,419,106); // ?
+yDefSprite(794,309,108,325,125); // &
+yDefSprite(795,327,108,331,125); // .
+
+yDefSprite(800,201,229,426,314); // +alXW^CgSE
+yDefSprite(801,1,269,181,385); // R[h
+
+yDefSprite(805,183,316,426,343); // uSONG SELECTv^Cg
+yDefSprite(806,183,345,338,364); // for Single Play
+yDefSprite(807,183,366,338,385); // for Double Play
+yDefSprite(808,309,127,385,156); // Auto BMP counter!
+
+yDefSprite(810,112,192,164,244); // qg
+yDefSprite(811,166+23,192+9,192+23,218+9); // +igh‚Ԃj
+yDefSprite(812,194+23,192+9,220+23,218+9); // +ig󓴁j
+
+yDefSprite(820,182,48,185,51); // +Ug\pEԂlp
+yDefSprite(821,187,48,190,51); // +Ug\pEΐFlp
+yDefSprite(822,182,102,186,105); // +Ug\pE{[_
+// XNb`IuWFؗp:p
+
+yDefSprite(830,102,1,105,89); // pE
+yDefSprite(831,107,1,110,89); // EpE
+yDefSprite(832,102,91,105,266); // pE(1)
+yDefSprite(833,107,91,110,266); // EpE(1)
+// yDefSprite(834,245,203,420,206); // 㑤pE
+// yDefSprite(835,245,208,420,211); // pE
+yDefSprite(834,245,203,245+120-1,206); // 㑤pE
+yDefSprite(835,245,208,245+120-1,211); // pE
+yDefSprite(836,387,135,402,150); // R[i[
+yDefSprite(837,387,152,402,167); // ER[i[
+yDefSprite(838,387,169,402,184); // R[i[
+yDefSprite(839,387,186,402,201); // ER[i[
+yDefSprite(840,102,91,105,91+140-1); // pE(2)
+yDefSprite(841,107,91,110,91+140-1); // EpE(2)
+
+yDefSprite(842,102,91,105,266-10); // pE(3) for +result
+yDefSprite(843,107,91,110,266-10); // EpE(3)
+
+// At@xbg
+yDefSprite(850,1,91,9,108); // A
+yDefSprite(851,11,91,19,108); // B
+yDefSprite(852,21,91,29,108); // C
+yDefSprite(853,31,91,39,108); // D
+yDefSprite(854,41,91,48,108); // E
+yDefSprite(855,1,110,9,127); // F
+yDefSprite(856,11,110,19,127); // G
+yDefSprite(857,21,110,29,127); // H
+yDefSprite(858,31,110,33,127); // I
+yDefSprite(859,35,110,43,127); // J
+yDefSprite(860,45,110,53,127); // K
+yDefSprite(861,1,129,9,146); // L
+yDefSprite(862,11,129,21,146); // M
+yDefSprite(863,23,129,31,146); // N
+yDefSprite(864,33,129,41,146); // O
+yDefSprite(865,43,129,51,146); // P
+yDefSprite(866,1,148,9,165); // Q
+yDefSprite(867,11,148,19,165); // R
+yDefSprite(868,21,148,29,165); // S
+yDefSprite(869,31,148,39,165); // T
+yDefSprite(870,41,148,49,165); // U
+yDefSprite(871,1,167,9,184); // V
+yDefSprite(872,11,167,21,184); // W
+yDefSprite(873,23,167,31,184); // X
+yDefSprite(874,33,167,41,184); // Y
+yDefSprite(875,43,167,51,184); // Z
+yDefSprite(876,1,186,9,203); // "/"
+yDefSprite(877,11,186,13,203); // "."
+yDefSprite(878,15,186,17,203); // "!"
+yDefSprite(879,19,186,27,203); // "%"
+yDefSprite(880,1,205,8,222); // 0
+yDefSprite(881,10,205,14,222); // 1
+yDefSprite(882,16,205,23,222); // 2
+yDefSprite(883,25,205,32,222); // 3
+yDefSprite(884,34,205,41,222); // 4
+yDefSprite(885,43,205,50,222); // 5
+yDefSprite(886,1,224,8,241); // 6
+yDefSprite(887,10,224,17,241); // 7
+yDefSprite(888,19,224,26,241); // 8
+yDefSprite(889,28,224,35,241); // 9
+
+// added by BM98v3.16
+yDefSprite(890,53,167,061,184); // @
+yDefSprite(891,29,186,37,203); // ?
+yDefSprite(892,39,186,41,203); // :
+yDefSprite(893,43,186,45,203); // ;
+yDefSprite(894,47,186,51,203); // [
+yDefSprite(895,53,186,57,203); // ]
+yDefSprite(896,52,205,60,222); // ^
+yDefSprite(897,37,224,40,241); // (
+yDefSprite(898,42,224,45,241); // )
+yDefSprite(899,47,224,51,241); // "
+yDefSprite(900,53,224,54,241); // '
+yDefSprite(901,56,224,57,241); // |
+yDefSprite(902,59,224,61,243); // ,
+yDefSprite(903,1 ,243, 9,260); // _
+yDefSprite(904,11,243,19,260); // ~
+yDefSprite(905,21,243,28,260); // =
+yDefSprite(906,30,243,37,260); // -
+yDefSprite(907,39,243,47,260); // +
+yDefSprite(908,49,243,56,260); // *
+
+yDefSprite(910,245,185,270,201); // 1P
+yDefSprite(911,272,185,297,201); // 2P
+yDefSprite(912,299,185,324,201); // Â\́uPov
+yDefSprite(913,326,185,351,201); // Â\́uQov
+
+// lIn B:Blue R:Red D:Dark T:Top C:Center B:Bottom
+for(i=0;i<9;i++){
+yDefSprite(920+i,428,1+i*41,458,40+i*41);
+// RT,RC,RB,BT,BC,BB,DT,DC,DB
+}
+
+// ԕ̏́iaolpj
+yDefSprite(930,317,213,323,227); // 0
+for(i=931;i<=939;i++){
+yDefSprite(i,245+(i-931)*8,213,251+(i-931)*8,227);
+}
+
+yDefSprite(940,112,246,157,267); // sakata
+
+for(i=0;i<3;i++){
+yDefSprite(941+i,175,54+i*6,194,58+i*6); // FIuWF
+}
+yDefSprite(944,154,66,173,70);
+yDefSprite(945,207,64,231,70);
+
+for(i=0;i<6;i++){
+yDefSprite(946+i,166,192+i*6,185,196+i*6);
+// 946 ԁE947 ΁E948 DE949 E950 bm98E 951F
+}
+
+}

+ +

@

+ +

{IɁAalqłAExtended Object/Chracter̋@\͎‚ł͂邪AƐꂽ̂ɂ\łB

+ +

ȂAɂ@\gƁAȃf[^ƂāAalXWȃf[^tH[}bgɏ̂ł͂ȂȂ邽߁ÂalXWp̃rA[Ō邱ƂłȂȂ邱ƂA炩߂f肵ĂB

+ +

ȏB

+ +

@

+ +

߂

+ + diff --git a/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf b/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf new file mode 100644 index 0000000000..f4948c2825 --- /dev/null +++ b/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf @@ -0,0 +1,326 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Lucida Console;}} +{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs20 ..: HOW TO READ A .BMS/.BME WITH A NOTEPAD AND A BRAIN :..\par + ..: Tutorial v1.1 by Jack A. Trades :..\par +\par +~ v1.1 differences\par +~1 Updated BPM Change method for over 255 and/or decimal BPM usage.\par +~2 Spelling/word errors fixed.\par +~3 Added a new KEYLOCATION variable, to go with the ~1 update.\par +\par +!TIP!\par +This tutorial is best viewed in fixed-width fonts, like Lucida Console or Courier New. It's also best viewed when Word Wrap feature is enabled, so if you need to copy and paste the entire tutorial to a temporary Notepad, then you may do so. You can always get the .rtf version if that's a hassle.\par +\par +!NOTE!\par +This tutorial is intended for the creation/viewing/translation (what the hell?) of a .bms/.bme for any beatmania game. I will not include any other function that might also function in other BEMANI games such as DDR arrows or whatever else that a . bms/.bme can do. BEATMANIA ONLY PLZTHXBYE.\par +\par +!!DISCLAIMER!!\par +This tutorial is created entirely from my knowledge and experience of .bms/.bme. I am not responsible for any loss of work, destruction of property, or loss of sanity when you are deciphering your own .bms/.bme and using this tutorial as your guide. Do not bug me if you somehow burned your computer or threw your cat out of the balcony. I don't want to hear it, except the cat part. I'll be sure to call Humane Society on that one.\par +\par +\par + So you want to read a BMS, eh? Well then, read on and I'll show what little bits of pieces of a .bms/.bme stand for, for I had no life, and I deciphered almost each of the mechanics a BMS/BME can have.\par +\par +\par + A BMS have two parts: HEADER and MAIN DATA FIELD. Without each other, they're useless, basically.\par +\par +\par +\par +\par +*----------HEADER\par +\par + There are three sections of the header: BASIC, EXTENSION, and the third section that I like to call ASSIGNMENT. \par +\par +\bullet BASIC is the heart and soul of the .bms/.bme, where it tells the simulator (and you) what the hell is the song about. Title of the song, artist name, genre, BPM, play mode, and play level is specified here.\par +\bullet EXTENSION is the optional header that can contain tags you can put as cosmetics, basically.\par +\bullet ASSIGNMENT is the last, but not least, section of the header. This is where the life of keysounds and background animations (hereon called as "bga") begin. You can specify as many as 255 keysound tags and 255 bga tags so the simulator knows what file to play at where and when.\par +\par + We will begin by explaining each available tags for BASIC header. Notice that lines that begin with *--- are my comments in the header section, as to not confuse you in an actual .bms/.bme.\par +\par +*---BASIC HEADER\par +\par +\par +\par +#PLAYER #\par +*---specifies player amount (options are 1 or 2). Use your logic; if it's 5/7-keys, use #PLAYER 1. If it's 10/14-keys, use #PLAYER 2.\par +\par +#GENRE [x]\par +*---specifies the genre [x] when the song is currently highlighted.\par +\par +#TITLE [x]\par +*---specifies the title [x] when the song is currently highlighted.\par +\par +#ARTIST [x]\par +*---specifies the artist [x] when the song is currently highlighted.\par +\par +#BPM ###\par +*---specifies ### ( 0 to 999 ) as the first (or only) BPM value of the song.\par +\par +#PLAYLEVEL ##\par +*---specifies # ( 0 to 9 ) as the amount of difficulty (stars) of the song. Some simulators, from my experience, can support values above 9, but let's not be that stupid, shall we?\par +\par +#MIDIFILE xxx.mid\par +*---This tag is optional if a bgm .wav/.mp3 already exists. Specifies the MIDI file to be played at the beginning of the song. MIDI file must be in the same directory where your .bms/.bme exists.\par +\par +\par +\par +*---EXTENSION HEADER\par +\par +\par +\par +#RANK #\par +*---specifies # ( 0 to 3, where 0 is Very Hard, 1 is Hard, 2 is Normal, and 3 is Easy) as the "rank" of the song. I don't know the exact function, but I don't think it'll tell the simulator to change the judge setting.\par +\par +#TOTAL ###\par +*---I'm not quite sure about this, but I think this specifies the maximum notes you can get in this song. So values from 0 to 9999 works, I guess.\par +\par +#VOLWAV ???\par +*---I don't know the actual specifier, but I have a hunch this tells the simulator to decrease or increase the volume of the bgm with/out keysounds.\par +\par +#STAGEFILE xxx.yyy\par +*---specifies the "preview" graphic of the song. Think backgrounds in DDR. This will be shown after you choose the song, during the loading of keysounds and bganimations, if available, and will disappear when the song starts. xxx.yyy specifies the filename and filetype respectively. I think you can also use directory command (Using ..\\..\\hi.jpg may tell the simulator to use the file hi.jpg two directories above the directory where this .bms/.bme exist) but I haven't tested it.\par +\par +%EMAIL [x]\par +*---a comment header; you can enter your e-mail address, if desired.\par +\par +%URL [x]\par +*---a comment header; you can enter your website url address, if desired.\par +\par +\par +\par +*---ASSIGNMENT HEADER\par +\par +\par +\par +#WAV** xxx.yyy\par +\par +*---this is where you specify the keysound file to be stored into a local variable by the simulator, where it will be able to be called upon during the gameplay of the song, and where ** is a two-digit hex value, xxx is the filename, and yyy is the filetype (commonly used are either WAV or MP3 files). \par +*---In Layman's terms, this is where you'll give the simulator a cardboard sign that says a two-digit number (or letter. explanation later...) and tell it to play SUCH AND SUCH file whenever you tell it to. So, an example would be:\par +\par +*---#WAV01 kickdrum.wav\par +\par +*---This means that whenever there's a section in the .bms/.bme that asks for a 01 in the keysound section, the simulator will then play the file kickdrum.wav, under two conditions: (1) IF AND ONLY IF the player actually presses the key, or (2) IF AND ONLY IF the digit called is in the Always-autoplay section.\par +\par +*---Confused with those new vocabularies? Read on and you'll understand what the hell I'm babbling.\par +\par +*---The **, or the two-digit number (or letter), ranges from 00 to FF. If you haven't noticed, it's the range of a 2-byte hex value. This means that you can specify up to 255 _different_ keysound files for the simulator to memorize. To assign more variables, just make a new line with changed variable number and filename. Example:\par +\par +*---#WAV01 kickdrum.wav\par +*---#WAV02 hi-hats.wav\par +\par +#BMP** xxx.yyy\par +\par +*---The #BMP tag has the same idea as the #WAV tag, and also the same usage. The only difference is that the variables will be called in different sections. See the Main Data Field for further explanation.\par +\par +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON\par +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON\par +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON\par +\par +*---You do NOT need to specify every single variable. That means stop typing 500 lines of specifying nothing. Any unspecified variables will be assumed as "blanks" by the simulator, and when it is called, the simulator will do nothing, if it's a keysound, or the simulator will stop any animation previously and display nothing, if it's a bga.\par +\par +\par +*----------MAIN DATA FIELD\par +\par + _THIS_ is the fun part. This section is where all of the keysounds are specified in bits and pieces of measures of the music, and _THIS_ is where you must act like a detective and decipher what the hell each line stands for. Thankfully, I have come with aid. And chips. And guacamole dip.\par +\par +BACK TO THE POINT\par +\par + Many of you will see jumbles of nothing but digits in a normal .bms/.bme file, but do you ever wonder how does it work? I'm sure you do, because if you've never wondered so, you won't be reading through here. Or to here, even.\par +\par + So we will begin, with the explanation. I'll have fun 'splaining as I will 'yping.\par + 'ey! 'ccent 're 'ool! 'nd 'nintelligible 'oo!!! 'o 'ffense.\par +\par +\par +\par + So here you are, wandering around the main data field, and you see numbers like this.\par +\par +#00412:00000000000000005F0000001A000000E3\par +\par +and something like that repeated differently about 3000 times.\par +\par +Let's begin understanding each section by breaking down the given example line. Obviously you should already understand the #. All codes begin with #. Duh.\par +\par +# 004 12 :00000000000000005F0000001A000000E3\par + ^\par + |\par + |\par +\par +This is your _Measure #_ . Obviously it ranges from Measure 1 (000) to Measure 1000 (999), but what song have 1000 measures? Hopefully you're not making a .bms/.bme to a nonstop megamix. Anyway, this tells the simulator what's going on in such measure. In this example, there are...12...thing...with a colon and many zeroes and 5F and 1A and E3 here and there in measure 5....interesting. Don't worry; you'll understand those things soon.\par +\par +Speaking of soon, we're moving right along to the next part. Boy was that quick or what?\par +\par +\par +# 004 12 :00000000000000005F0000001A000000E3\par + ^\par + |\par + |\par +\par + This is what I like to call KEY LOCATION variable, where it tells the simulator to put those...zeroes...and 5F...and the rest of the garbage into a variable of digit "12."\par + That didn't make a lot of sense, did it? Of course not. It didn't to me at first, until I deciphered the possible variables of key locations. Below is the list of the KEY LOCATION and its variable two-digit number.\par +\par +\par +KEYLOCATION - ACTUAL LOCATION/FUNCTION\par +======================================\par +11 - White key 1 (Most left)\par +12 - Blue key 1 (Most left)\par +13 - White key 2 (Second from the left)\par +14 - Blue key 2 (Center)\par +15 - White key 3 (Second from the right)\par +18 - Blue key 3 (Most right)\par +19 - White key 4 (Most right)\par +16 - Scratch (The big circle thing that makes wiki wiki wiki wik wik sound)\par +17 - \bullet unknown function currently\bullet\par +04 - BGA\par +07 - \bullet unknown function currently\bullet\par +06 - MISS BGA\par +01 - Always Autoplay\par +03 - BPM Change\par +08 - "Advanced" BPM Change\par +\par +\par + So in the above example, the code 00000000000000005F0000001A000000E3 will all be executed solely for the Blue key 1.\par +\par +\par + "BUT JACK A. TRADES, I WANNA KNOW HOW THOSE NUMBERS WORK AND WHAT ARE THEY ACTUALLY!?!??!?!/1/1/131'31'3nklnalndkland"\par +\par + Let's stop the question and start looking at the example below.\par +\par +# 004 12 :00000000000000005F0000001A000000E3\par + ^ ^\par + --------------------------------\par + |\par + |\par +\par + _NOT_ simply put, they are the codes that tell the simulator to call up all of the specified variables in a single measure. I lost you, didn't I?\par + Simply put, in this example, the simulator is told to call the following variables: 00 (8 times), 5F, 00 (3 times), 1A, 00 (3 times), and E3. That means the simulator will first find what you have specified earlier in the ASSIGNMENT HEADER, follow your command, and open/play that file for you at that point of time.\par + But how should this help you in terms of music? How can you specify exact call locations for the simulator, like a kick drum every beat in a measure, or a hi-hats for every-other-eighth-beat in a measure? This is where the (other) fun part comes in.\par +\par + The amount of digits available will determine what kind of a note each double-digit is. I lost you again, didn't I?\par +\par + For (another?) example, if you put a line of code such as this instead of the given example above:\par +\par + #00412:5F\par +\par + You're telling the simulator to play the 5F keysound whenever the player presses the blue key 1 at the first beat of measure 5.\par +\par + HOLY CRAP HOW DID I KNOW THAT!?\par + Well, if you've studied music, and understand what the hell I was saying earlier, then you must know you only specified one digit for the measure, and that means the simulator will assume that double-digit as a whole note. Remember: 4 beats equal a measure, and a whole note = 4 beats.\par +\par + So if you specify this instead:\par +\par + #00412:5F005F00\par +\par + The simulator will assume each double-digit as _quarter note_ and do the polka. I mean, do its thing. Play 5F in the first beat of the measure, play 00 in the second beat, play 5F in the third and finally play 00 in the fourth.\par + \par + If I specify:\par +\par + #00412:001A001A001A001A\par +\par + I'm telling the simulator to play the 1A in every other sixteenth notes. Get the picture?\par +\par + \'a4 THE AMOUNT OF DOUBLE DIGITS AvAILABLE IN THE LINE OF CODE SPECIFIES THE TYPE OF NOTE EACH ARE \'a4\par +\par + If there is one double-digit, it is a whole note.\par + If there are two double-digits, each double-digit is a half note.\par + If there are four double-digits, each double-digit is a quarter note.\par + If there are eight double-digits, each double-digit is a eighth note.\par + If there are sixteen double-digits, each double-digit is a sixteenth note.\par + If there are twelve double-digits, each double-digit is a twelveth note.\par + If there are thirty two double-digits, each double-digit is a thirty-second note.\par + ET CETERA\par +\par + The highest note type a simulator can take, usually, is a 192nd note. If you go beyond that, something is wrong with you or the song. Probably you, but you never know.\par +\par +\par + So let's recap! What does this code actually tell you?\par +\par + #00412:00000000000000005F0000001A000000E3\par +\par + \bullet At measure 5 ( #004 = MEASURE #5 ),\par + \bullet The following variables are to be called in the Blue Key 1 section ( #xxx12 = Blue Key 1 ):\par + \bullet 00,00,00,00,00,00,00,00,5F,00,00,00,1A,00,00,00,E3\par + \bullet Where each note is assumed as (in this strange case) a seventeenth note.\par + \bullet Therefore, the simulator must play the keysound of variable 00 in the first seventeenth note, then another 00 in the second seventeenth note, etc.\par + \par +\par + And you're done! See, that wasn't so hard, was it? But you think I'm forgetting something. Actually, two things. Well, I'm not, so shut up. That code always apply to everything you see in the KEYLOCATION table, including BGA and Always Autoplay.\par + The difference in the BGA, however, is that the simulator will load the graphics of the specified variables. So, if you've specified #BMP01 neh.bmp, and you want to call the graphic in a note, then the simulator will _NOT_ play the keysound for 01, but it will instead load the neh.bmp file.\par + The other and my last point that you think I've forgotten is the actual explanation of the other KEYLOCATION functions. I'll put the table below again for your convenience.\par +\par +\par +\par +KEYLOCATION - ACTUAL LOCATION/FUNCTION\par +======================================\par +11 - White key 1 (Most left)\par +12 - Blue key 1 (Most left)\par +13 - White key 2 (Second from the left)\par +14 - Blue key 2 (Center)\par +15 - White key 3 (Second from the right)\par +18 - Blue key 3 (Most right)\par +19 - White key 4 (Most right)\par +16 - Scratch (The big circle thing that makes wiki wiki wiki wik wik sound)\par +17 - \bullet unknown function currently\bullet\par +04 - BGA\par +07 - \bullet unknown function currently\bullet\par +06 - MISS BGA\par +01 - Always Autoplay\par +03 - BPM Change\par +08 - "Extended" BPM Change\par +\par +\par +\par +So what's 17 and 07 all about? I sure as hell don't know. Perhaps if you know, you would help me out with this tutorial. C'mon; I typed everything you see here, from my brain, in one single session.\par +\par +Never mind that for now. What's MISS BGA, Always Autoplay, and BPM, you ask?\par +\par + MISS BGA is where you can specify any custom animations you have when the player is currently missing the notes he's playing. If you want an absolute, easy example, find and download onoken - P8107 bms file with the background, and just miss a couple of notes (or the whole song and failing it, like I did!). You'll see that onoken has incorporated a custom MISS animation.\par + Of course, if you don't have the patience to make one, you can always specify a single image that has the word MISS in bold, or something. Preferably red, you know.\par + But nevertheless, to specify them is the exact same as how you would specify BGA or keysounds, but the only hassle is you have to copy and paste the same exact line for each measure you have.\par +\par + This is also true for my next topic: Always Autoplay. Mostly used in [L7] and usually in [7] keysound files, this baby will make sure any sound (or annoying noises) will always be played even if the player just sits there and watches himself plummet to a Game Over screen. Or something. The usage is a bit different, however. Remember that \'a4 THE AMOUNT OF DOUBLE DIGITS AvAILABLE IN THE LINE OF CODE SPECIFIES THE TYPE OF NOTE EACH ARE \'a4 rule? Well, it applies to every code you can see, even those beyond the horizon.\par +\par + So what do you have to do when you want to have two, three, or even four or more keysounds to play at the same exact time? Specify a new line, with different codes! Example is below:\par +\par +#00001:01\par +#00001:02\par +#00001:03\par +\par +This tells the simulator to play keysounds 01, 02, and 03 at the first note in measure 1. Simple, no?\par +\par + But when you blame me for forgetting things, you are right for one thing, but ONLY one thing. I forgot to mention the BPM. That lil' bugger is used when you want to suddenly change the BPM value of the song. The usage is still the same, with a little variation.\par +\par +#01103:96\par +\par + The lil' code above this paragraph tells the simulator to change the BPm at measure 12 to 150 BPM. So how did I get 150 from 96? Some weird formula like standard deviation of the population mean in a binomial distribution?\par +\par + Heck no, I got 150 because 96 is the hex value of 150. Let me remind you that 2-byte hex value only goes up to 255 in decimal, so in short, if you're trying to create a .bms/.bme for MaxX Unlimited, where the BPM changes from 300 to 280 to 300 to 150 to 320, we might have a problem. How would you specify a BPM value over 255?\par +\par +[credit goes to pukpuk/2220 for finding the method originally and jammitch for pointing me to the solution]\par +\par + You can specify your BPM in the ASSIGNMENT header, as you may recall. The process is the same; the code tag is the only one different. So if you want to specify a BPM of 320, put:\par +\par +#BPM01 320\par +\par + And call it in the main data field like:\par +\par +#00408:01\par +\par + This will call the BPM Change of 01 in measure 5, and thus changing the song's BPM to 320.\par +\par +\par + So if you want multiple BPM changes:\par +\par +#01103:96AFC8E1\par +\par + This tells the simulator to change the BPM to 150 at the first quarter note of Measure 12, to 175 at second quarter note, 200 at third, and 225 and fourth.\par +\par +\par +\par +\par +\par +\par +\par +\par +And with that, I conclude this tutorial. Hopefully I have made a tutorial that can actually help you read .bms/.bme more intelligently, and not think of egyptian inscriptions when you see those codes. Until next time, I am Jack A. Trades.\par +\par +~ let empathy fill the void ~\par +} + \ No newline at end of file diff --git a/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.txt b/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.txt new file mode 100644 index 0000000000..78423d4dd9 --- /dev/null +++ b/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.txt @@ -0,0 +1,323 @@ +..: HOW TO READ A .BMS/.BME WITH A NOTEPAD AND A BRAIN :.. + ..: Tutorial v1.1 by Jack A. Trades :.. + +~ v1.1 differences +~1 Updated BPM Change method for over 255 and/or decimal BPM usage. +~2 Spelling/word errors fixed. +~3 Added a new KEYLOCATION variable, to go with the ~1 update. + +!TIP! +This tutorial is best viewed in fixed-width fonts, like Lucida Console or Courier New. It's also best viewed when Word Wrap feature is enabled, so if you need to copy and paste the entire tutorial to a temporary Notepad, then you may do so. You can always get the .rtf version if that's a hassle. + +!NOTE! +This tutorial is intended for the creation/viewing/translation (what the hell?) of a .bms/.bme for any beatmania game. I will not include any other function that might also function in other BEMANI games such as DDR arrows or whatever else that a .bms/.bme can do. BEATMANIA ONLY PLZTHXBYE. + +!!DISCLAIMER!! +This tutorial is created entirely from my knowledge and experience of .bms/.bme. I am not responsible for any loss of work, destruction of property, or loss of sanity when you are deciphering your own .bms/.bme and using this tutorial as your guide. Do not bug me if you somehow burned your computer or threw your cat out of the balcony. I don't want to hear it, except the cat part. I'll be sure to call Humane Society on that one. + + + So you want to read a BMS, eh? Well then, read on and I'll show what little bits of pieces of a .bms/.bme stand for, for I had no life, and I deciphered almost each of the mechanics a BMS/BME can have. + + + A BMS have two parts: HEADER and MAIN DATA FIELD. Without each other, they're useless, basically. + + + + +*----------HEADER + + There are three sections of the header: BASIC, EXTENSION, and the third section that I like to call ASSIGNMENT. + + BASIC is the heart and soul of the .bms/.bme, where it tells the simulator (and you) what the hell is the song about. Title of the song, artist name, genre, BPM, play mode, and play level is specified here. + EXTENSION is the optional header that can contain tags you can put as cosmetics, basically. + ASSIGNMENT is the last, but not least, section of the header. This is where the life of keysounds and background animations (hereon called as "bga") begin. You can specify as many as 255 keysound tags and 255 bga tags so the simulator knows what file to play at where and when. + + We will begin by explaining each available tags for BASIC header. Notice that lines that begin with *--- are my comments in the header section, as to not confuse you in an actual .bms/.bme. + +*---BASIC HEADER + + + +#PLAYER # +*---specifies player amount (options are 1 or 2). Use your logic; if it's 5/7-keys, use #PLAYER 1. If it's 10/14-keys, use #PLAYER 2. + +#GENRE [x] +*---specifies the genre [x] when the song is currently highlighted. + +#TITLE [x] +*---specifies the title [x] when the song is currently highlighted. + +#ARTIST [x] +*---specifies the artist [x] when the song is currently highlighted. + +#BPM ### +*---specifies ### ( 0 to 999 ) as the first (or only) BPM value of the song. + +#PLAYLEVEL ## +*---specifies # ( 0 to 9 ) as the amount of difficulty (stars) of the song. Some simulators, from my experience, can support values above 9, but let's not be that stupid, shall we? + +#MIDIFILE xxx.mid +*---This tag is optional if a bgm .wav/.mp3 already exists. Specifies the MIDI file to be played at the beginning of the song. MIDI file must be in the same directory where your .bms/.bme exists. + + + +*---EXTENSION HEADER + + + +#RANK # +*---specifies # ( 0 to 3, where 0 is Very Hard, 1 is Hard, 2 is Normal, and 3 is Easy) as the "rank" of the song. I don't know the exact function, but I don't think it'll tell the simulator to change the judge setting. + +#TOTAL ### +*---I'm not quite sure about this, but I think this specifies the maximum notes you can get in this song. So values from 0 to 9999 works, I guess. + +#VOLWAV ??? +*---I don't know the actual specifier, but I have a hunch this tells the simulator to decrease or increase the volume of the bgm with/out keysounds. + +#STAGEFILE xxx.yyy +*---specifies the "preview" graphic of the song. Think backgrounds in DDR. This will be shown after you choose the song, during the loading of keysounds and bganimations, if available, and will disappear when the song starts. xxx.yyy specifies the filename and filetype respectively. I think you can also use directory command (Using ..\..\hi.jpg may tell the simulator to use the file hi.jpg two directories above the directory where this .bms/.bme exist) but I haven't tested it. + +%EMAIL [x] +*---a comment header; you can enter your e-mail address, if desired. + +%URL [x] +*---a comment header; you can enter your website url address, if desired. + + + +*---ASSIGNMENT HEADER + + + +#WAV** xxx.yyy + +*---this is where you specify the keysound file to be stored into a local variable by the simulator, where it will be able to be called upon during the gameplay of the song, and where ** is a two-digit hex value, xxx is the filename, and yyy is the filetype (commonly used are either WAV or MP3 files). +*---In Layman's terms, this is where you'll give the simulator a cardboard sign that says a two-digit number (or letter. explanation later...) and tell it to play SUCH AND SUCH file whenever you tell it to. So, an example would be: + +*---#WAV01 kickdrum.wav + +*---This means that whenever there's a section in the .bms/.bme that asks for a 01 in the keysound section, the simulator will then play the file kickdrum.wav, under two conditions: (1) IF AND ONLY IF the player actually presses the key, or (2) IF AND ONLY IF the digit called is in the Always-autoplay section. + +*---Confused with those new vocabularies? Read on and you'll understand what the hell I'm babbling. + +*---The **, or the two-digit number (or letter), ranges from 00 to FF. If you haven't noticed, it's the range of a 2-byte hex value. This means that you can specify up to 255 _different_ keysound files for the simulator to memorize. To assign more variables, just make a new line with changed variable number and filename. Example: + +*---#WAV01 kickdrum.wav +*---#WAV02 hi-hats.wav + +#BMP** xxx.yyy + +*---The #BMP tag has the same idea as the #WAV tag, and also the same usage. The only difference is that the variables will be called in different sections. See the Main Data Field for further explanation. + +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON +*---HUGE NOTE, AS IN READ THE BELOW COMMENT BEFORE YOU GO ON + +*---You do NOT need to specify every single variable. That means stop typing 500 lines of specifying nothing. Any unspecified variables will be assumed as "blanks" by the simulator, and when it is called, the simulator will do nothing, if it's a keysound, or the simulator will stop any animation previously and display nothing, if it's a bga. + + +*----------MAIN DATA FIELD + + _THIS_ is the fun part. This section is where all of the keysounds are specified in bits and pieces of measures of the music, and _THIS_ is where you must act like a detective and decipher what the hell each line stands for. Thankfully, I have come with aid. And chips. And guacamole dip. + +BACK TO THE POINT + + Many of you will see jumbles of nothing but digits in a normal .bms/.bme file, but do you ever wonder how does it work? I'm sure you do, because if you've never wondered so, you won't be reading through here. Or to here, even. + + So we will begin, with the explanation. I'll have fun 'splaining as I will 'yping. + 'ey! 'ccent 're 'ool! 'nd 'nintelligible 'oo!!! 'o 'ffense. + + + + So here you are, wandering around the main data field, and you see numbers like this. + +#00412:00000000000000005F0000001A000000E3 + +and something like that repeated differently about 3000 times. + +Let's begin understanding each section by breaking down the given example line. Obviously you should already understand the #. All codes begin with #. Duh. + +# 004 12 :00000000000000005F0000001A000000E3 + ^ + | + | + +This is your _Measure #_ . Obviously it ranges from Measure 1 (000) to Measure 1000 (999), but what song have 1000 measures? Hopefully you're not making a .bms/.bme to a nonstop megamix. Anyway, this tells the simulator what's going on in such measure. In this example, there are...12...thing...with a colon and many zeroes and 5F and 1A and E3 here and there in measure 5....interesting. Don't worry; you'll understand those things soon. + +Speaking of soon, we're moving right along to the next part. Boy was that quick or what? + + +# 004 12 :00000000000000005F0000001A000000E3 + ^ + | + | + + This is what I like to call KEY LOCATION variable, where it tells the simulator to put those...zeroes...and 5F...and the rest of the garbage into a variable of digit "12." + That didn't make a lot of sense, did it? Of course not. It didn't to me at first, until I deciphered the possible variables of key locations. Below is the list of the KEY LOCATION and its variable two-digit number. + + +KEYLOCATION - ACTUAL LOCATION/FUNCTION +====================================== +11 - White key 1 (Most left) +12 - Blue key 1 (Most left) +13 - White key 2 (Second from the left) +14 - Blue key 2 (Center) +15 - White key 3 (Second from the right) +18 - Blue key 3 (Most right) +19 - White key 4 (Most right) +16 - Scratch (The big circle thing that makes wiki wiki wiki wik wik sound) +17 - unknown function currently +04 - BGA +07 - unknown function currently +06 - MISS BGA +01 - Always Autoplay +03 - BPM Change +08 - "Advanced" BPM Change + + + So in the above example, the code 00000000000000005F0000001A000000E3 will all be executed solely for the Blue key 1. + + + "BUT JACK A. TRADES, I WANNA KNOW HOW THOSE NUMBERS WORK AND WHAT ARE THEY ACTUALLY!?!??!?!/1/1/131'31'3nklnalndkland" + + Let's stop the question and start looking at the example below. + +# 004 12 :00000000000000005F0000001A000000E3 + ^ ^ + -------------------------------- + | + | + + _NOT_ simply put, they are the codes that tell the simulator to call up all of the specified variables in a single measure. I lost you, didn't I? + Simply put, in this example, the simulator is told to call the following variables: 00 (8 times), 5F, 00 (3 times), 1A, 00 (3 times), and E3. That means the simulator will first find what you have specified earlier in the ASSIGNMENT HEADER, follow your command, and open/play that file for you at that point of time. + But how should this help you in terms of music? How can you specify exact call locations for the simulator, like a kick drum every beat in a measure, or a hi-hats for every-other-eighth-beat in a measure? This is where the (other) fun part comes in. + + The amount of digits available will determine what kind of a note each double-digit is. I lost you again, didn't I? + + For (another?) example, if you put a line of code such as this instead of the given example above: + + #00412:5F + + You're telling the simulator to play the 5F keysound whenever the player presses the blue key 1 at the first beat of measure 5. + + HOLY CRAP HOW DID I KNOW THAT!? + Well, if you've studied music, and understand what the hell I was saying earlier, then you must know you only specified one digit for the measure, and that means the simulator will assume that double-digit as a whole note. Remember: 4 beats equal a measure, and a whole note = 4 beats. + + So if you specify this instead: + + #00412:5F005F00 + + The simulator will assume each double-digit as _quarter note_ and do the polka. I mean, do its thing. Play 5F in the first beat of the measure, play 00 in the second beat, play 5F in the third and finally play 00 in the fourth. + + If I specify: + + #00412:001A001A001A001A + + I'm telling the simulator to play the 1A in every other sixteenth notes. Get the picture? + + THE AMOUNT OF DOUBLE DIGITS AvAILABLE IN THE LINE OF CODE SPECIFIES THE TYPE OF NOTE EACH ARE + + If there is one double-digit, it is a whole note. + If there are two double-digits, each double-digit is a half note. + If there are four double-digits, each double-digit is a quarter note. + If there are eight double-digits, each double-digit is a eighth note. + If there are sixteen double-digits, each double-digit is a sixteenth note. + If there are twelve double-digits, each double-digit is a twelveth note. + If there are thirty two double-digits, each double-digit is a thirty-second note. + ET CETERA + + The highest note type a simulator can take, usually, is a 192nd note. If you go beyond that, something is wrong with you or the song. Probably you, but you never know. + + + So let's recap! What does this code actually tell you? + + #00412:00000000000000005F0000001A000000E3 + + At measure 5 ( #004 = MEASURE #5 ), + The following variables are to be called in the Blue Key 1 section ( #xxx12 = Blue Key 1 ): + 00,00,00,00,00,00,00,00,5F,00,00,00,1A,00,00,00,E3 + Where each note is assumed as (in this strange case) a seventeenth note. + Therefore, the simulator must play the keysound of variable 00 in the first seventeenth note, then another 00 in the second seventeenth note, etc. + + + And you're done! See, that wasn't so hard, was it? But you think I'm forgetting something. Actually, two things. Well, I'm not, so shut up. That code always apply to everything you see in the KEYLOCATION table, including BGA and Always Autoplay. + The difference in the BGA, however, is that the simulator will load the graphics of the specified variables. So, if you've specified #BMP01 neh.bmp, and you want to call the graphic in a note, then the simulator will _NOT_ play the keysound for 01, but it will instead load the neh.bmp file. + The other and my last point that you think I've forgotten is the actual explanation of the other KEYLOCATION functions. I'll put the table below again for your convenience. + + + +KEYLOCATION - ACTUAL LOCATION/FUNCTION +====================================== +11 - White key 1 (Most left) +12 - Blue key 1 (Most left) +13 - White key 2 (Second from the left) +14 - Blue key 2 (Center) +15 - White key 3 (Second from the right) +18 - Blue key 3 (Most right) +19 - White key 4 (Most right) +16 - Scratch (The big circle thing that makes wiki wiki wiki wik wik sound) +17 - unknown function currently +04 - BGA +07 - unknown function currently +06 - MISS BGA +01 - Always Autoplay +03 - BPM Change +08 - "Extended" BPM Change + + + +So what's 17 and 07 all about? I sure as hell don't know. Perhaps if you know, you would help me out with this tutorial. C'mon; I typed everything you see here, from my brain, in one single session. + +Never mind that for now. What's MISS BGA, Always Autoplay, and BPM, you ask? + + MISS BGA is where you can specify any custom animations you have when the player is currently missing the notes he's playing. If you want an absolute, easy example, find and download onoken - P8107 bms file with the background, and just miss a couple of notes (or the whole song and failing it, like I did!). You'll see that onoken has incorporated a custom MISS animation. + Of course, if you don't have the patience to make one, you can always specify a single image that has the word MISS in bold, or something. Preferably red, you know. + But nevertheless, to specify them is the exact same as how you would specify BGA or keysounds, but the only hassle is you have to copy and paste the same exact line for each measure you have. + + This is also true for my next topic: Always Autoplay. Mostly used in [L7] and usually in [7] keysound files, this baby will make sure any sound (or annoying noises) will always be played even if the player just sits there and watches himself plummet to a Game Over screen. Or something. The usage is a bit different, however. Remember that THE AMOUNT OF DOUBLE DIGITS AvAILABLE IN THE LINE OF CODE SPECIFIES THE TYPE OF NOTE EACH ARE rule? Well, it applies to every code you can see, even those beyond the horizon. + + So what do you have to do when you want to have two, three, or even four or more keysounds to play at the same exact time? Specify a new line, with different codes! Example is below: + +#00001:01 +#00001:02 +#00001:03 + +This tells the simulator to play keysounds 01, 02, and 03 at the first note in measure 1. Simple, no? + + But when you blame me for forgetting things, you are right for one thing, but ONLY one thing. I forgot to mention the BPM. That lil' bugger is used when you want to suddenly change the BPM value of the song. The usage is still the same, with a little variation. + +#01103:96 + + The lil' code above this paragraph tells the simulator to change the BPm at measure 12 to 150 BPM. So how did I get 150 from 96? Some weird formula like standard deviation of the population mean in a binomial distribution? + + Heck no, I got 150 because 96 is the hex value of 150. Let me remind you that 2-byte hex value only goes up to 255 in decimal, so in short, if you're trying to create a .bms/.bme for MaxX Unlimited, where the BPM changes from 300 to 280 to 300 to 150 to 320, we might have a problem. How would you specify a BPM value over 255? + +[credit goes to pukpuk/2220 for finding the method originally and jammitch for pointing me to the solution] + + You can specify your BPM in the ASSIGNMENT header, as you may recall. The process is the same; the code tag is the only one different. So if you want to specify a BPM of 320, put: + +#BPM01 320 + + And call it in the main data field like: + +#00408:01 + + This will call the BPM Change of 01 in measure 5, and thus changing the song's BPM to 320. + + + So if you want multiple BPM changes: + +#01103:96AFC8E1 + + This tells the simulator to change the BPM to 150 at the first quarter note of Measure 12, to 175 at second quarter note, 200 at third, and 225 and fourth. + + + + + + + + +And with that, I conclude this tutorial. Hopefully I have made a tutorial that can actually help you read .bms/.bme more intelligently, and not think of egyptian inscriptions when you see those codes. Until next time, I am Jack A. Trades. + +~ let empathy fill the void ~ \ No newline at end of file diff --git a/Docs/SimfileFormats/BMS/_src.txt b/Docs/SimfileFormats/BMS/_src.txt new file mode 100644 index 0000000000..c7b3a79e27 --- /dev/null +++ b/Docs/SimfileFormats/BMS/_src.txt @@ -0,0 +1,17 @@ +BM98Data_format_specification.html = http://www.sun-inet.or.jp/~yaneurao/bm98/bmsformat.html +BM98FinalSecret.html = http://www.sun-inet.or.jp/~yaneurao/bm98/bm98secret.html (Japanese) +tmp.txt = http://unhappyangel.at.infoseek.co.jp/bms/tmp.txt +BMS_Reading_Tutorial.txt = http://www.angelfire.com/ga4/jackatrades606606/BMS_Reading_Tutorial.txt + +[BMS Dialects] +Drum BMS: http://wiki.bms.ms/Drum_BMS:Spec (Japanese) +DDR BMS + * http://wiki.bms.ms/DDR_BMS:Spec (Japanese) + * http://www.mni.ne.jp/~asuma/dde/explain.html (Japanese) + * http://homepage1.nifty.com/nickle/ex_format.html (Japanese) + +[not in repository but good reading] +http://fileformats.wikia.com/wiki/Be-Music_Script +http://nvyu.net/rdm/rby_ex.php (warning: Korean language material) +http://wiki.bms.ms/Bms:Spec +http://wiki.bms.ms/index.php?title=Bms:Format&oldid=1615 (last good revision) \ No newline at end of file diff --git a/Docs/SimfileFormats/BMS/tmp.txt b/Docs/SimfileFormats/BMS/tmp.txt new file mode 100644 index 0000000000..9ce2bbe99d --- /dev/null +++ b/Docs/SimfileFormats/BMS/tmp.txt @@ -0,0 +1,187 @@ +BMS Format Specification(Remake version.) +Written in June 28th 2003. + +original document written by Urao Yane. +edited by U(uhangel4u@yahoo.co.jp) + +"BMS" means a Be-Music Source file. A file which has BMS suffix is regarded as the BMS file. +This file format was produced by Urao Yane and NBK in 1998.and It revised sometime. +And I adopted this file format to BM98, Delight Delight Reduplication, MixWaver, nazoBMPlay and so on. +Now,anyone can use this format freely. + +BM98 Drink Edition +http://www5c.biglobe.ne.jp/~kbs/bm98/ (Japanese) +Delight Delight Reduplicaton +http://nickle.hey.to/ (Japanese) +MixWaver +http://hello.to/mixwaver/ (Korean) +nazoBMPlay +http://www.nothing.sh/nazobmplay/ (Japanese) + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + + +The line begining at '#' is the command line. All the rest are ignored (use for comments). +And this BMS file is compiled at runtime , so you can order any lines freely. +And there is no difference in the command line between using a capital letter or not. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +
+ +#PLAYER [1-4] + +#PLAYER 1 +This data is for Single Play. +#PLAYER 2 +This data is for Two Players. +#PLAYER 3 +This data is for Double Play. +#PLAYER 4 +This data is for Two Players.(Players will plays same sequence) + +#GENRE xxxxxxxx +Definition of Genre. + +#TITLE xxxxxxxx +Definition of Title. + +#ARTIST xxxxxxxx +Definition of Artist. + +#BPM xxx +Definition of BPM.(Beats Per Minite) at the top of music. default : 130 value type : double. + +#MIDIFILE xxxxxxx.mid +Background music by MIDI.but,It's not recommend. + +#PLAYLEVEL x +Information of Game Level for player. + +#RANK [0-3] +judgement level. +x = 0 :very hard, 1: hard, 2: normal, 3: easy default : 2 + +#VOLWAV xxx +relative volume control (percentage) + +#TOTAL xxx +increments of Groove Gauge +ex. +#TOTAL 120 +It means when all sequence was played over great, Groove Gauge's value is 120% + +#WAVxx yyyyyyyy.wav(or .mp3) +definition of Wave Data. xx : 01 to FZ(01-09-0A-0Z-10-1Z...) , yyyyyyyy.wav : wave file name +When use mp3 files,you need mp3 CODEC. + +e.g. +#WAV01 HOUSE01.WAV // assign HOUSE01.WAV to 01 wav +#WAV02 HOUSE02.WAV // assign HOUSE02.WAV to 02 wav +#WAVFZ HOUSE03.mp3 // assign HOUSE03.mp3 to FZ wav + +#BMPxx yyyyyyyy.bmp(or gif,jpg,png) +definition of Bitmap file. xx : 01 to FF(Hex) , yyyyyyyy.bmp : bitmap file name +Bitmap size must be 256 * 256.(max color 65536) +If you use "gif or jpg or png", with Susie Plug-in. +gif : ifgif.spi jpg : ifjpg.spi png : ifpng.spi + +About Susie Plug-ins : http://www.digitalpad.co.jp/~takechin/ + +e.g. +#BMP01 HOUSE01.BMP // assign HOUSE01.BMP to 01 bitmap +#BMP02 HOUSE02.BMP // assign HOUSE02.BMP to 02 bitmap +#BMPEE HOUSE03.PNG // assign HOUSE03.PNG to EE bitmap + +#StageFile xxxx.bmp(or gif,jpg,png) +Show assigned Picture when loading bitmaps,wavs and compiling bms. + +#BPMxx yyy +Use to change BPM(Beats Per Minite). xx : 01 to ff(Hex) + +But ,the bitmap defined by #BMP00 is something special. +This bitmap shows when a player do a poor play. + +#STOPxx yyy +Use to stop sequence. xx : 01 to ff(Hex) +yyy : a quarter note = 48 + an eighth note = 24 + a whole note = 192 + note / n = 192/n + +#CDDA xx +Audio cds Track No. + +#BackBMP xxxx.bmp(or gif,jpg,png) +Set BackGround Picture.(size:640*480) + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +// a sample of random loading function + +#random 2 // create a random number (1 or 2) + +#if 1 // if the number was equal to 1 then... +#00111:31313131 // this is effective... +#endif + +#if 2 // if the number was equal to 2 then... +#00113:32003232 // this is effective +#endif + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + + +#aaabb:cccccccc + +aaa: track number (from 000 to 999) +bb : channel number where you want to send message.(from 00 to FF) +cccccccc : + + + +01 : BGM(background music by WAVE) +02 : shortening note. +03 : changing a Tempo[1-255] +04 : BGA(background animation) +06 : changing Poor-bitmap +07 : BGA Layer. +08 : Extended BPM(Use assigned of #BPMxx) +09 : Stop the sequence(Use assigned of #STOPxx) + +11 to 19 : Object Channel of 1 player side +21 to 29 : Object Channel of 2 player side +31 to 39 : Can't show Object Channel of 1 player side +41 to 49 : Can't show Object Channel of 2 player side +51 to 59 : Long note Object Channel of 1 player side +61 to 69 : Long note Object Channel of 2 player side + + + +#00211:03030303 +This means 4 objects at the left of 1 player side in 002 track. +This object is assigned to wave No.03 which was defined by #WAV03 xxxx.wav. +And this 4 objects are arranged evenly in this track. + +Please try the following patterns. + +#00211:0303030303 + +#00211:0303000303 + +#00211:010101 +#00211:00020202 + +P.S. + +#00202:0.5 : Track2 have Half length. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +This document and this format is free! +I hope the day will come when my BMS format will use all over the world. + +Urao Yane \ No newline at end of file diff --git a/Docs/SimfileFormats/DWI/DWI.txt b/Docs/SimfileFormats/DWI/DWI.txt new file mode 100644 index 0000000000..6668020847 --- /dev/null +++ b/Docs/SimfileFormats/DWI/DWI.txt @@ -0,0 +1,311 @@ +This text was taken from Dance With Intensity's README file, accessed online at +http://dwi.ddruk.com/readme.php#4 +It has been reformatted to fit 80 characters in a line, except when necessary. +------------------------------------------------------------------------------- +4. DWI FILE FORMAT + +Steps + +DWI uses step-files that are similar to the ".MSD" file format. However, there +are new additions and some tags are treated slightly differently, so the +extension was changed to avoid confusion. DWI files with these new additions +will not work properly in other simulators. + +Step-patterns are defined in the same way as .MSD files - use the numeric +keypad as a reference for most patterns: + + 7=U+L 8=U 9=U+R + + 4=L 6=R + + 1=D+L 2=D 3=D+R + + (U+D = A and L+R = B) + +A '0' indicates no step. Each character defaults to one 1/8 of a beat. Surround +a series of characters with the following brackets to change the rate at which +the steps come: + + (...) = 1/16 steps + [...] = 1/24 steps + {...} = 1/64 steps + `...' = 1/192 steps + +6-panel (Solo) mode uses additional characters: + + -\---- = C + ----/- = D + + L\---- = E + -\D--- = F + -\-U-- = G + -\---R = H + + L---/- = I + --D-/- = J + ---U/- = K + ----/R = L + + -\--/- = M + +To do more than 2 panels at a time, you can join codes together with the "<..>" +object, and they will all count as the same beat. So, to do a jump that involves +Left, Right, Up-Left, and Up-Right, you could do: + + -\--/- = M + L----R = B + ====== + L\--/R = (or , , <46M>, etc.) + +MSD files from other simulators will work with DWI, with a change in the 'GAP' +value being the only change usually necessary. DWI calculates the 'GAP' value +differently than other simulators that use the MSD format. + +DWI does not support the BMS file format. There is a utility available that can +convert any BMS file into DWI format. Each song only requires one DWI file for +all of its steps, so if you are converting BMS files please remember that all +the different difficulties of step patterns will be contained in the same DWI +file. + +Hold Arrows + +In the DWI file format a hold arrow is signified with the ! symbol. The string +8!8 will begin an 'up' hold arrow, and the arrow will be released the next time +the program encounters an 'up' arrow: by itself or combined with another arrow +(7, 8, 9, A, etc.) The characters 7!4 would show both 'up' and 'left' arrows but +only the left arrow would be held. The format could best be described as +"show!hold". + +Tags + +These tags should be in every DWI file: + +#TITLE:...; title of the song. +#ARTIST:...; artist of the song. +#GAP:...; number of milliseconds that pass before the program starts counting beats. Used to sync the steps to the music. +#BPM:...; BPM of the music + +Additionally, the following tags can be given: + +#DISPLAYTITLE:...; provides an alternate version of the song name that can also include special characters. +#DISPLAYARTIST:...; provides an alternate version of the artist name that can also include special characters. + +Special Characters are denoted by giving filenames in curly-brackets. +eg. #DISPLAYTITLE:The {kanji.png} Song; + +The extra character files should be 50 pixels high and be black-and-white. +The baseline for the font should be 34 pixels from the top. + +#DISPLAYBPM:...; tells DWI to display the BPM on the song select screen in a user-defined way. Options can be: +* - BPM cycles randomly +a - BPM stays set at 'a' value (no cycling) +a..b - BPM cycles between 'a' and 'b' values + +#FILE:...; path to the music file to play (eg. /music/mysongs/abc.mp3 ) +(NB: if the file is not found, a .wav or .mp3 file in the same folder as the DWI file is used) +#MD5:...; an MD5 string for the music file. Helps ensure that same music file is used on all systems. +#FREEZE:...; a value of the format "BBB=sss". Indicates that at 'beat' "BBB", the motion of the arrows should stop for "sss" milliseconds. Turn on beat-display in the System menu to help determine what values to use. Multiple freezes can be given by separating them with commas. +#CHANGEBPM:...; a value of the format "BBB=nnn". Indicates that at 'beat' "BBB", the speed of the arrows will change to reflect a new BPM of "nnn". Multiple BPM changes can be given by separating them with commas. +#STATUS:...; can be "NEW" or "NORMAL". Changes the display of songs on the song-select screen. +#GENRE:...; a genre to assign to the song if "sort by Genre" is selected in the System Options. Multiple Genres can be given by separating them with commas. +#CDTITLE:...; points to a small graphic file (64x40) that will display in the song selection screen in the bottom right of the background, showing which CD the song is from. The colour of the pixel in the upper-left will be made transparent. +#SAMPLESTART:...; the time in the music file that the preview music should start at the song-select screen. Can be given in Milliseconds (eg. 5230), Seconds (eg. 5.23), or minutes (eg. 0:05.23). Prefix the number with a "+" to factor in the GAP value. +#SAMPLELENGTH:...; how long to play the preview music for at the song-select screen. Can be in milliseconds, seconds, or minutes. +#RANDSEED:x; provide a number that will influence what AVIs DWI picks and their order. Will be the same animation each time if AVI filenames and count doesn't change (default is random each time). +#RANDSTART:x; tells DWI what beat to start the animations on. Default is 32. +#RANDFOLDER:...; tells DWI to look in another folder when choosing AVIs, allowing 'themed' folders. +#RANDLIST:...; a list of comma-separated filenames to use in the folder. + +Each pattern of steps for different modes have the same basic format: + +#SINGLE:BASIC:X:...; + ^ ^ ^ ^ + | | | + step patterns. In doubles, the left pad's steps are given first, + | | | then the right pad's, separated by a colon (:). + | | | + | | + difficulty rating. Should be 1 or higher. + | | + | + Difficulty. Can be one of "BASIC", "ANOTHER", "MANIAC", or "SMANIAC" + | + + Style. Can be one of "SINGLE", "DOUBLE", "COUPLE", or "SOLO". "COUPLE" is + Battle-mode steps. + +Comments can be used by using "//". Everything after this on the same line in +the file will be ignored. + +Background Animations, Movies, and Visualizations + +DWI allows for background animations using a special script within the +step-file. A script consists of static images, animated images, and/or an AVI +movie. Using the script, you can create a variety of layered effects. A sample +animation is described below: + + #BACKGROUND: + + M:MOVIE:.\movies\sfx.avi STARTAT:-1.0 LAYER:0; + V:VIS:.\Vis\somevis.svp LAYER:0; + E:FILE:.\anim\equalizer.png ANIMATE:10,33 POSITION:-33,0 SPACING:40,40 LAYER:1; + D:FILE:.\anim\dancer-m1.png ANIMATE:24,66 SIZE:2 MULT:0,0.5,1 SPACING:30,30 LAYER:1; + X:LAYER:1 OFF; + + SCRIPT:M....................... + ................E............... + D...............X,V...............E...............D............... + X,M...............E...............D...............X,V............... + E...............D...............X,M...............E............... + D...............X,V...............E...............D............... + X,M...............E...............D...............X; + + #END; + +The first part of the "BACKGROUND" definition defines the effects. Each effect is attributed to a letter or number ("a-z", "A-Z", "1-9"). The format for defining an effect is: + +The first four tags cannot be used together... +FILE: path to a file. Either a still image, or an animation (multiple frames of animation are stacked *vertically* in the image). +MOVIE: path to a standard Windows AVI file. Note that the movie won't play unless you have the right codecs installed in Windows. Movies are currently stretched to fill the whole screen. +VIS: path to a Sonique Visualization plug-in (SVP). Visualizations are currently stretched to fill the whole screen and are always put on Layer 0, and no other commands will affect it. +OFF turns off a layer, effectively making it invisible. Will not turn off layer 0. + +LAYER:l the layer to use (required): + + 0 - base layer. + (Image/Movie is always tiled and SPACING is ignored). + 1 - overlay layer + 2 - overlay layer + 3 - overlay layer + + +STARTAT:t number of seconds into the AVI file to start at. If negative, the movie will wait that many seconds before playing. Can be decimal (eg. 1.3 = 1300ms). +MULT:r,g,b Red, Green, and Blue pixels in the image/movie are tinted by the given amounts. This way the same image/movie can be used multiple times across DWI files and have different colours. +ANIMATE:f,n1,n2,...nF indicates that the FILE contains multiple frames of animation. "f" is the number of frames of animation. Each following value is the number of milliseconds each frame of animation is displayed. If not enough time-values are given, the last given value is used. Ignored for MOVIE type. +MOVE:x,y the image/movie is moved by the given number of pixels every millisecond. +SPACING:x,y images are always tiled if they don't fill up the screen. This tag allows you to add some spacing between the images by the given number of pixels horizontally and vertically (Layer > 0) +SIZE:s multiplies the image size by 's' in both directions. Must be a whole number. +KEEPPOS normally when a new effect is turned on, its position is reset. This tag keeps the layer where it is, useful for keeping images moving smoothly. +KEEPTIME (MOVIEs only) normally when a movie starts, it starts from the beginning or the time given in the "STARTAT" tag. Adding this tag will keep it playing so when that layer is enabled again, it will have kept going. + +Following the effect definition, comes the actual animation script. This is a +sequence of characters in a similar way as the step-patterns are given - each +character normally is 1/8 of a beat, though brackets can be used to change the +time-values. In this way, background animations can be syched to the steps. +It is suggested that the steps for "SINGLE:BASIC" are copied to after the +"SCRIPT:" tag, and then the effects be set. In this way one knows that the +script will match the same length of the music. + +The animations take effect as that point in the song is reached. Multiple +effects can occur at the same time if they are separated with a comma. A period +(.) means no new effect should take place at that point. A zero (0) turns off +all effects and returns the background to the original graphic. + +More Information + +Please check our website for more information and links to useful resources. + +5. NONSTOP MODE AND CRS FILE FORMAT + +DWI uses special CRS files that should be put in subfolders of the "Courses" +directory. Now courses can be shared with others if they have the same files and +directory structure as you. + +CRS files are similar to DWI files in structure. The file defines the basic +details about the course, such as its name and which songs should be played. +Currently these tags are supported: + +Required tags: + +#COURSE:...; the name of the course. +#DISPLAYCOURSE:...; alternate name of course that can include special characters. Similar to #DISPLAYTITLE and #DISPLAYARTIST in DWI files. +#SONG:...; defines a song in the course. This can either be a selection from the Player's Best (or Worst), a Random stage or a predefined stage. The syntax for each is given below: + + PLAYER'S BEST/WORST STAGE: + #SONG:BESTx:[BASIC|ANOTHER|MANAIC|SMANIAC]; + #SONG:WORSTx:[BASIC|ANOTHER|MANAIC|SMANIAC]; + - choose a song with the given index 'x'. So BEST1 is the most popular + song, and WORST5 is the 5th least popular song. If the given + difficulty is not available, DWI will choose the next closest difficulty. + Songs that are equally popular will be put in random order. + + RANDOM STAGE: + #SONG:*:[a]|[a..b]; + - choose a random song, with a difficulty rating equal to or between 'a' and 'b'. + - if only 'a' is given, 'b' is assumed to be the same as 'a'. + + #SONG:*:[BASIC|ANOTHER|MANIAC|SMANAIC]; + - choose a random song with a given difficulty level. + + #SONG:folder\*:[a]|[a..b]|[BASIC|ANOTHER|MANIAC|SMANIAC]; + - choose a random song from a given folder. + + DEFINED STAGE: + #SONG:\:; + - will use a song from with the given title. + So to play a song called "My Song", which is in + './Songs/Default/mysong/mysong.dwi', on MANIAC, + you would say: + + #SONG:Default\My Song:MANIAC; + +NB: Either the TITLE or folder the DWI file is in can be used. + +In addition, modifiers can be defined for each song by adding a list of +comma-separated values to the end of the #SONG line. These modifiers are the +same as listed above, plus + + xRANDOM - where 'x' is the number of random effects to apply. + 'x' can be 1 to 7. + AWARDx - where 'x' is the number of lives to award after + finishing the stage. + +So to play "My Song", Maniac, with 2.0x, Left, Hidden, and with one random +effect, use: +#SONG:Default\My Song:MANIAC:2.0x,LEFT,HIDDEN,1RANDOM; + +Optional tags: + +#REPEAT:...; can be "YES" or "NO". If set, starts course over from the beginning after last song. +#COMBO:PERFECT; during play, the combo counter will only go up if a "PERFECT" is made. +#COMBOMODE:1; sets how much is added to the combo counter for jumps. Can be 1 or 2. +#LIVES:4; sets the number of 'lives' given to each player at the start of game play. After each stage is cleared, a given number of lives is added, either by a value specified by the "AWARDx" tag in the CRS file, or using the scale below: + + Song was 6 feet or less - 1 life. + Song was 7 or 8 feet - 2 lives. + Song was 9 feet or more - 3 lives. + +At the course selection screen, courses that have songs without steps for the +current style (SINGLE, DOUBLE, etc) will be filtered out. Courses are loaded +when DWI starts. + +6. LRC (LYRICS) FILE FORMAT + +DWI can display lyrics during a song if it finds a .LRC file in the same folder +as the step-file. The file should have the same file-base as the .DWI file - +so, for example, if your DWI file is called "mysong.dwi", the lyrics file should +be called "mysong.lrc". + +This file is a simple text-file that tells the program what text to display and +when. It can also define the colour the text is displayed in. + +Each line starts with a tag in the format [xxxxxx]. Currently, these tags are +supported: + +[COLOUR] Sets the colour for the following text. After the tag, a colour value is given in hex (ie. yellow would be 0xFFFF00). Up to 10 colour values can be given, separated by commas. +[offset:xxxx] Makes timestamps following this tag have their times adjusted by 'xxxx' milliseconds. Use to fine-tune timings for lyrics. +[MM:SS.ss] Sets a time. +The text following the tag will be shown on the screen after this +time has passed, replacing any text that was there before. To clear text, +provide just a tag with no text after it. + +A line-break can be defined using the pipe "|" symbol. + +A new colour can be selected from the defined colours by using "{cX}", where +"X" is a number from 0 to 9. + +Sample LRC file: + +[0:00.00]aye-aye-aye|aye-aye-aye|aye-aye-aye +[0:05.30]Where's my samurai? +[0:07.00] +[COLOUR]0xffff00 +[0:13.50]I've been searching for a man +[0:16.00]All across Japan. +...etc... \ No newline at end of file diff --git a/Docs/SimfileFormats/DWI/readme.html b/Docs/SimfileFormats/DWI/readme.html new file mode 100644 index 0000000000..cd66e320a0 --- /dev/null +++ b/Docs/SimfileFormats/DWI/readme.html @@ -0,0 +1,1224 @@ +

DANCE WITH INTENSITY v2.50.00
+© SimWolf, 2003

+ +
    +
  1. DISCLAIMER AND TERMS OF USE +
  2. WHAT'S NEW? +
  3. USING AND CONFIGURING DWI
     
      +
    • Basic Operation +
    • Song Sorting +
    • Selecting Song Modifiers +
    • Special keys +
    • Controller Configuration +
    • Gameplay Settings +
    • Sound Configuration +
    • Changing the Display from Windowed to Full-screen +
    • Sound effects +
    • Command-line options +
    • Testing a song +
    • Setting Skins +
    • Setting Announcer and Sound Effects +
    • Folder- and Genre- Specific Banners +
    • AVI Movie Support +
    • Sonique Visualizations (SVP) Support +
    • User Profiles +
      +
  4. DWI FILE FORMAT
       +
  5. NONSTOP MODE AND CRS FILE FORMAT +
  6. LRC (LYRICS) FILE FORMAT +
  7. LIMITATIONS +
  8. VERSION HISTORY +
  9. FUTURE DEVELOPMENT AND THANKS +
+ +

1. DISCLAIMER AND TERMS OF USE

+ +

This program is provided for free, as-is. Although it has been tested on multiple systems for compatability and reliability, you run this program at your own risk. I cannot be held responsible if the program causes file loss or other problems.

+ +

THIS PROGRAM IS *NOT* FOR SALE!!! IT SHOULD NEVER BE BUNDLED WITH ANY OTHER FILES (MUSIC OR STEP FILES) ON ANY MEDIA, INCLUDING (BUT NOT LIMITED TO) CD's, DVD's, DISKS OR OTHER MEDIA.

+ +

DWI is Donation-Ware. Although you are not required to donate, it would be greatly appreciated if you enjoy the program that you contribute something towards the developers.

+ +

This program simulates a popular arcade and home video game. It was written to allow myself the ability to play songs from the games without having to switch CDs in my Playstation or Dreamcast, and also affords the ability to add new songs not currently available. It also allows for playing older songs with new play modes, such as downward-scrolling arrows. This program is being released to the public in the hopes that others would find it useful in the same manner.

+ +

As such, this program REQUIRES responsibility on the part of the end-user (ie. YOU) to use the program LEGALLY. You should *ONLY* play songs where you:

+ + + + + +
a)  Own the game from which that music comes from.
or b)  Own the soundtrack CD from which the music comes from.
or c)  Legally own rights to the music being used (ie. other CDs, etc.)
+

+ +

I own all the available soundtracks and videogames for the music I own, and respectfully ask that you support the games and purchase them. Thank you.

+ +

2. WHAT'S NEW?

+ +
+v2.50.00 - August 14, 2003.
+            - NEW: Addition of WAVE, BRAKE, and 0.25x modifiers.
+            - BUGFIX: Stage numbers and various other numbers are coloured again.
+				- BUGFIX: Bonus stages now default to Heavy/Maniac again.
+            - OTHER: Various other bugs I can't remember that have been fixed.
+				
+
+

+ +

3. USING AND CONFIGURING DWI

+ +

BASIC OPERATION

+ +

When you first run DWI, you will receive a warning screen about responsible use of the program. This warning screen will appear *EVERY* time the program detects new songs.

+ +

DWI uses step-files with the extension ".DWI". These files go in their own folder along with their associated background and banner images. Optionally the music file can go in the same folder also.

+ +

DWI supports multiple collections of songs, so you can organise your songs as you see fit. To do this, just create different sub-directories in the "Songs" folder.

+ +

eg. For a song with a step-file of "abc.dwi", put into a collection called "My Songs", your directory structure should look like this:

+     <INSTALL directory>
+        + Songs
+           + My Songs
+              + abc
+                 + abc-banner.png   (any name, the program will detect that it's a banner)
+                 + abc-bg.png       (any name, the program will detect that it's a background)
+                 + abc.dwi          (any name)
+                 + (abc.mp3/wav)    (optional - otherwise FILE: tag is used).
+                 + (abc.lrc)        (optional - should have same base as DWI file).
+
+

+ +

So, in each "song folder", there should be two image files (background and banner), the DWI file, and optionally the music file in MP3 or WAV format.

+ +

Song Sorting

+ +

When you are at the song select screen, simply press up or down to change the current collection you are in. Songs are organized alphabetically within each collection, and collections are organized alphabetically also.

+ +

Another option is to sort your music by genre. To activate this, go to "Options Menu", then "System Menu", and change the sort method to "GENRE" *. This requires your DWI files to have a tag defining the genre to put the music into (see DWI format, below). Multiple genres can be given (separated by a comma), to make the same song appear in different collections. At the song select screen, press up or down to change the genre.

+ +

You can also press Up-Left to change the sort method. This cycles through:

    +
  • Folder/Genre (default) +
  • Folder/Genre, Separated +
  • All Music (by title) +
  • All Music (by artist) +
  • BPM. +
  • Player's Best (top 64) +

+ +

Selecting Song Modifiers

+ +

At the song-select screen, press the "Select" button/key, and use the arrows to change options. When done, press "Select" again. Alternatively, you can hold down "Start" when selecting a song and you will be taken to a +screen where you can set your options.

+ +

+ + + + + + + + + +
Speed: 1.5x, 2.0x, 3.0x, 4.0x, 5.0x, 8.0x, 0.5x, 0.75x, 0.25x
Boost: BOOST, BRAKE, WAVE
Appear: HIDDEN, SUDDEN, STEALTH
Turn: LEFT, MIRROR, RIGHT, SHUFFLE
Other: LITTLE, FLAT, SOLO
Dark: DARK (can't see arrow indicators)
Scroll: REVERSE
Freeze: NOFREEZE
Power: POWER-DROP (gauge starts full and depletes), DEATH (must full-combo song)

+ +

For courses and bonus stages, use the same text as above in the course definition file when setting modifiers.
+eg. #SONG:Default\MySong:BASIC:1.5x,HIDDEN,LEFT,FLAT;

+ + +

Special keys

+ +

The function keys will be used to adjust or enable various gameplay functions. Primarily these are designed for people creating DWI files and want to adjust timing.

+ +

+ + + + + + +
F1/F2 - Restarts the song (developer mode only)
F3/F4 - Adjust playback speed of song down/up (during song select/gameplay)
F5/F6 - Adjust BPM value down/up by 0.50 BPM. (during gameplay)
F7/F8 - Adjust BPM value down/up by 0.02 BPM. (during gameplay)
F9/F10 - Adjust GAP value down/up by 5ms. (during gameplay)
F12 - Toggle "Assist Click" on/off. (during song select/gameplay)

+ +NB: Enable autoplay in the main options menu to prevent song from failing while fine-tuning. (Or set "GAME OVER" to "End of Song"... or just use developer mode). + +

Controller Configuration

+ +

To change the inputs, simply go to the Options Menu from the main screen and goto "Keyboard Configuration" or "Gamepad Configuration". Choose to configure either Player 1 or Player 2's inputs and you will be prompted to press each key, joystick button or dancepad square in turn. You cannot choose an input that is currently in use. To skip joystick buttons, press the "TAB" key.

+ +

When done, select "Return" to make the change take effect.

+ +

Gameplay Settings

+ +

Gameplay settings such as difficulty level, danger display, and end-of-game settings are selected from the Gameplay Configuration menu from the Options screen. These changes take effect immediately.

+ +

Extra Stages

+ +

If you AA a Heavy or Challenge mode song on the last stage and have Extra Stages enabled in the Game Options, you can play another song. The song(s) you can choose from are either generated randomly (3 for Extra Stage #1, one for Extra Stage #2), or can be defined in a CRS file.

+ +

+ + +
bonus-1.crs   Songs for Extra Stage #1
bonus-2.crs   Songs for Extra Stage #2

+ +

NB: These CRS files go in the same directory as DWI2.exe, not the Courses folder.

+ +

Sound Configuration

+ +

The default sound settings for DWI are 44Khz, Stereo, 16-bit samples. However, you may want to lower these +settings on slower computers.

+ +* NB: You must exit DWI and start it again for this change to take effect. + +

Changing the Display from Windowed to Full-screen

+

Go to the "System Menu" from the Options screen and change the display type.

+ +* NB: You must exit DWI and start it again for this change to take effect. + +

Sound effects

+ +

Sound effects are all in the "Sounds" directory. You can add or remove files to most directories, and the program will use the existing files during gameplay. However, files in the root of the sound-set directory and those in the "attract" and "combo" directories must be the same name in order for the program to find them and play them appropriately.

+ +

Command-line options

+ +

You can run DWI with various command line options to configure some values. (Please read the FAQ for details +on how to start the program with command line options). These options are available:

+ +

+ + + + + + + + + + + + + + + +
/sdl   Starts DWI in the software-only graphics mode.
/16bpp   Runs DWI in 16-bit colour mode (SDL), or uses a 16-bit primary surface (DirectX)
/32bpp   Runs DWI in 32-bit colour modes/32-bit primary surface.
/fullscreen   Runs DWI in fullscreen mode (may need to use to start on some cards)
/window   Runs DWI in a window. Some cards won't support this so DWI will try fullscreen.
/log   Creates a 'dance.log' file that can be useful for debugging.
/anysize   In DirectX mode, this tries to make textures in any size, rather than creating textures to the nearest power-of-two value (ie. a 75x60 image is loaded into a texture that big instead of a 128x64 one). This can speed up performance on some cards and save memory, if your card can handle it.
/sw   In SDL mode, surfaces are created in regular memory (default)
/hw   In SDL mode, surfaces are created in hardware memory (can improve performance if your card can handle it).
/priority:x   can force DWI to run as a more "important" program under Windows. "1" starts it as "ABOVE NORMAL", "2" is "TIME CRITICAL". May improve performance in certain cases. (Use with caution if you're running many other processes at the same time).
/sdevice:x   tells DWI to use a given sound-device. Use "/log" and look in dance.log first for a list of available sound-devices.
/fps:xx   makes DWI try to stay at a given framerate (20..100). If you've got a fast machine, this can really save on computer cycles.
/showsm   will add songs with only SMANIAC steps to the song-select screen.
/skipsearch   will prevent DWI from searching the Songs folder at startup.
/dither:0   will turn off the dithering effect DWI uses for semi-transparent images on old videocards that can't handle them. Some users may prefer this to remove the 'speckles' in the gameplay graphics.

+ +

You can limit paging to virtual memory during gameplay (which can cause skips as Windows decides to write or retrieve data from disk) using these flags:

+ +

+ + +
/minRAM:xx   Instructs DWI to try to reserve at least this much physical memory from the Operating System. *
/maxRAM:xx   Instructs DWI to try to reserve at most this much physical memory from the Operating System. *
 
* Only works in Windows NT, 2000, and XP. Default is 16-32MB.

+ +

Use these flags to fix strange behavior in DWI...

+ +

+ + + + + + + + + + + + + +
/key:nonexclusive   affect how DirectInput is initialized. Should be paired with one of /key:fg or /key:bg
/key:exclusive  
/key:fg   affect how DirectInput is intialized.
/key:bg  
/altcombo   for reasons known to the heavens and my machine in the basement, DWI would not display the 'lives' image in Nonstop Mode, instead locking up the computer. I'm convinced this is a videocard/driver issue, as the code to draw the image is exactly the same as the code to display any other image... but oh well. Using this command line argument will tell DWI to not try to display the image and instead write "X Lives" in its place, which seemed to make it work. Strange... but the option's there in case you run into the problem too.
/v5hack   some Voodoo card drivers seem to allocate space for textures incorrectly (off by one) - this should hopefully fix the problem.
/altmovie   Uses an alternate way of drawing the background movies and visualizations for older videocards that display solid-colour textures instead.
/noshade   Prevents the extra shading effect on the song-select wheel from being added.

+ +

Testing a song

+ +

+ + + + + + + + + +
/test:...   You can start DWI in test/developer mode by using the "/test:..." command line argument. Provide the *folder* the .dwi file is in.
/style:...   use this set of steps (SINGLE, DOUBLE, SOLO). Default is SINGLE.
/level:...   use this level of steps (BASIC, ANOTHER, MANIAC, SMANIAC). Default is BASIC.
/p2   test using player 2's controls instead.
/speed:X   starts song at a given speed (1..5)
/scroll:X   starts song with given speed modifier (0.5, 0.75, 1.5, 2, 3, etc.)
/startat:<TIME>   jumps to a given time into the song (game-time). <TIME> can be given in minutes, seconds, or milliseconds. +
   ie.  /startat:1:05.5  (minutes)
+        /startat:65.5    (seconds)
+        /startat:65500   (ms)      - all the same position.
/tick:1   turns the assist click on at startup (default is off).
/dark   hides the fixed-place arrows during testing.

+ +

Example:

+ +

"DWI.exe /test:.\Songs\Development\MyNewSong /style:SINGLE /level:MANIAC /p2 /speed:4 /scroll:2 /startat:1:00"

+ +

Starts testing the .dwi file found in \songs\development\mynewsong, in SINGLE mode, with MANIAC-level steps. Player 2's controls are used, and the song's speed is set to '4'. Arrows are displayed as though the "x2" modifier was active. The song starts at the 1-minute mark.

+ +

Setting Skins

+ +

Create different sub-directories within the "Skins" folder for each skin you wish to use. So, for example: +

+     <INSTALL directory>
+        + Skins
+            + Default  (leave as-is)
+            + Skin A
+            + Skin B
+            + ...         

+ +

The filenames for each skin should be the same as in the default directory. If an image isn't found, the default is used. This way you can create skins that are relatively simple, or very elaborate ones. And you don't need to delete any of the original files. ;) There is a limit of 64 skins.

+ +

Changes will take effect when you leave the Skin Selection screen.

+ +

I do ask, however, that you keep the title of the program as "Dance With Intensity". Thank you. :)

+ +

Setting Announcer and Sound Effects

+ +

Similar to skins, just create new directories in the 'Sounds' folder for each sound set you wish to use. So, for example: +

+     <INSTALL directory>
+        + Sounds
+            + Default   (leave as-is)
+            + Jack
+            + Jill
+            + ...         

+ +

The tree structure for each set should be the same as is used for the "Default" directory. For example: +

    + Jill
+        + attract    - files should be named attract-00.wav, attract-01.wav, attract-02.wav
+        |              (these are the sounds used on the title screen)
+        + combo      - files should be named combo-00.wav and combo-01.wav
+        |              ("100 Combo" and "Combo stopped")
+        + danger     - a set of files played when power level at danger or zero.
+        + eval
+        |   + A
+        |   + B      - sets of files to play at the evaluation screen based on grade
+        |   + ...   
+        + good       - a set of files played when power level in the 'good' range
+        + great      - "                                           " 'great' range
+        + over
+        |   + fail   - files played at game over screen (failure)
+        |   + pass   - "                              " (cleared all stages)
+        + select
+        |   + new    - files played when #STATUS:NEW; is set in DWI file and song is selected
+        |   + song   - files played when a song is selected
+        + start
+        +   + go     - files played at "Here we go!" screen.
+        +   + ready  - files played at "Ready?" screen.
+        + warning    - a set of files played when the power gauge is in the 'warning' range.

+ +

There should not be more than 64 sound effects in a single subdirectory. There is a limit of 64 sets. Changes will take effect once you leave the Announcer/Sound Select screen. Please keep the title sound effect (attract-00.wav) as "Dance With Intensity".

+ +

Folder- and Genre- Specific Banners

+

You can make DWI display a special banner for each folder when it is highlighted on the Song-Select Screen. To do this, simply put a standard (horizontal) banner with the same name as the folder in the 'Songs' folder. (eg. a banner for 'Default Songs' would be ".\Songs\Default Songs.png").

+ +

If you have sorting by Genre on, you can have special banners for each Genre by putting banners in PNG format with the same name as the Genre referenced into ".\Genres". (eg. "Pop Music.png").

+ +

Folder-Specific Banners can also be made for Courses too. Just put a PNG file with the same name as the subfolder the CRS files are in, in the "Courses" directory.

+ +

AVI Movie Support

+

AVI movies can be played in the background while you play. See the "Background Animation" section below for more details on how this is set up. From the System Menu, you can tell DWI whether to not play AVI files at all, or set the quality level from 1 (worst) to 10 (full). The default is 5. Changing this value could affect your framerate, so play with the values to determine what works best for your system.

+ +

Random animations are picked from the ./Movies/Random folder and played in the background of songs without a defined background script if enabled in the System Options menu. This folder can be changed by a flag in the DWI file also, enabling themes.

+ +

Sonique Visualizations (SVP) Support

+

Sonique visualizations can be played in the background while you play. See the "Background Animation" section below for more details on how this is set up. From the System Menu, you can tell DWI whether to use them at all, or set the quality level from 1 (worst) to 10 (full). The default is 5. Changing this value could affect your framerate, so play with the values to determine what works best for your system.

+ +

Random visualizations are picked from the ./Vis folder and played in the background of songs without a defined background script if enabled in the System Options menu. Their behavior can often be changed by editing the 'vis.ini' file that is created after they are used in DWI, similar to in Sonique.

+ +

User Profiles

+

DWI2.40 introduced 'user profiles' - a way that multiple users can play DWI on the same machine and keep their own individual records. Setting up a new profile is easy - simply create a new subdirectory in the "Profiles" directory with the name of the user (15 characters or less), and inside that folder, put a 64x64 PNG file called 'user.png' to represent you in the game. Look at the 'Profiles/Sample User' folder for an example.

+ +

When you use a profile, DWI will create an individual records file and profile information file in the same directory that keeps track of your individual achievements.

+ +

When you get a high score, it will be saved to your own profile's records ("New Personal Best"), and, if you beat the overall high score, it will also be saved to the system records ("It's a New Record!"), with your username registered with it.

+ +

Using a user-profile also lets you track some other statistics, such as overall high scores and combos for each mode. It will also store the last-used modifiers you used (eg. 2x speed modifier, Reverse) between sessions, so you don't have to set it again each time you start a new game.

+ +

This option can be disabled in the Game Options Menu if you prefer.

+ +4. DWI FILE FORMAT + +

Steps

+ +

DWI uses step-files that are similar to the ".MSD" file format. However, there are new additions and some tags are treated slightly differently, so the extension was changed to avoid confusion. DWI files with these new additions will not work properly in other simulators.

+ +

Step-patterns are defined in the same way as .MSD files - use the numeric keypad as a reference for most patterns: +

+  7=U+L     8=U      9=U+R
+
+  4=L                6=R
+
+  1=D+L     2=D      3=D+R
+
+    (U+D = A and L+R = B)
+

+ +

A '0' indicates no step. Each character defaults to one 1/8 of a beat. Surround a series of characters with the following brackets to change the rate at which the steps come: +

+   (...)  = 1/16 steps
+   [...]  = 1/24 steps
+   {...}  = 1/64 steps
+   `...'  = 1/192 steps

+ +

6-panel (Solo) mode uses additional characters: +

+   -\---- = C
+   ----/- = D
+
+   L\---- = E
+   -\D--- = F
+   -\-U-- = G
+   -\---R = H
+
+   L---/- = I
+   --D-/- = J
+   ---U/- = K
+   ----/R = L
+
+   -\--/- = M

+ +

To do more than 2 panels at a time, you can join codes together with the "<..>" object, and they will all count as the same beat. So, to do a jump that involves Left, Right, Up-Left, and Up-Right, you could do: +

+   -\--/- = M
+   L----R = B
+   ======
+   L\--/R = <MB>  (or <LE>, <IH>, <46M>, etc.)

+ +

MSD files from other simulators will work with DWI, with a change in the 'GAP' value being the only change usually necessary. DWI calculates the 'GAP' value differently than other simulators that use the MSD format.

+ +

DWI does not support the BMS file format. There is a utility available that can convert any BMS file into DWI format. Each song only requires one DWI file for all of its steps, so if you are converting BMS files please remember that all the different difficulties of step patterns will be contained in the same DWI file.

+ +

Hold Arrows

+ +

In the DWI file format a hold arrow is signified with the ! symbol. The string 8!8 will begin an 'up' hold arrow, and the arrow will be released the next time the program encounters an 'up' arrow: by itself or combined with another arrow (7, 8, 9, A, etc.) The characters 7!4 would show both 'up' and 'left' arrows but only the left arrow would be held. The format could best be described as "show!hold".

+ +

Tags

+ +

These tags should be in every DWI file:

+ +

+ + + + +
#TITLE:...;   title of the song.
#ARTIST:...;   artist of the song.
#GAP:...;   number of milliseconds that pass before the program starts counting beats. Used to sync the steps to the music.
#BPM:...;   BPM of the music

+ +

Additionally, the following tags can be given:

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#DISPLAYTITLE:...;   provides an alternate version of the song name that can also include special characters.
#DISPLAYARTIST:...;  provides an alternate version of the artist name that can also include special characters.
+  
+ Special Characters are denoted by giving filenames in curly-brackets.
+ eg. #DISPLAYTITLE:The {kanji.png} Song;
+  
+ The extra character files should be 50 pixels high and be black-and-white. The baseline for the font should be 34 pixels from the top.
+  
#DISPLAYBPM:...;tells DWI to display the BPM on the song select screen in a user-defined way.  Options can be:
+
+*    - BPM cycles randomly
+a    - BPM stays set at 'a' value (no cycling)
+a..b - BPM cycles between 'a' and 'b' values +
#FILE:...;   path to the music file to play (eg. /music/mysongs/abc.mp3 )
+ (NB: if the file is not found, a .wav or .mp3 file in the same folder as the DWI file is used)
#MD5:...;   an MD5 string for the music file. Helps ensure that same music file is used on all systems.
#FREEZE:...;   a value of the format "BBB=sss". Indicates that at 'beat' "BBB", the motion of the arrows should stop for "sss" milliseconds. Turn on beat-display in the System menu to help determine what values to use. Multiple freezes can be given by separating them with commas.
#CHANGEBPM:...;   a value of the format "BBB=nnn". Indicates that at 'beat' "BBB", the speed of the arrows will change to reflect a new BPM of "nnn". Multiple BPM changes can be given by separating them with commas.
#STATUS:...;   can be "NEW" or "NORMAL". Changes the display of songs on the song-select screen.
#GENRE:...;   a genre to assign to the song if "sort by Genre" is selected in the System Options. Multiple Genres can be given by separating them with commas.
#CDTITLE:...;   points to a small graphic file (64x40) that will display in the song selection screen in the bottom right of the background, showing which CD the song is from. The colour of the pixel in the upper-left will be made transparent.
#SAMPLESTART:...;   the time in the music file that the preview music should start at the song-select screen. Can be given in Milliseconds (eg. 5230), Seconds (eg. 5.23), or minutes (eg. 0:05.23). Prefix the number with a "+" to factor in the GAP value.
#SAMPLELENGTH:...;   how long to play the preview music for at the song-select screen. Can be in milliseconds, seconds, or minutes.
#RANDSEED:x;   provide a number that will influence what AVIs DWI picks and their order. Will be the same animation each time if AVI filenames and count doesn't change (default is random each time).
#RANDSTART:x;   tells DWI what beat to start the animations on. Default is 32.
#RANDFOLDER:...;   tells DWI to look in another folder when choosing AVIs, allowing 'themed' folders.
#RANDLIST:...;   a list of comma-separated filenames to use in the folder.
+

+ +

Each pattern of steps for different modes have the same basic format: +

#SINGLE:BASIC:X:...;
+ ^      ^     ^ ^
+ |      |     | + step patterns.  In doubles, the left pad's steps are given first, 
+ |      |     |   then the right pad's, separated by a colon (:).
+ |      |     |
+ |      |     + difficulty rating.  Should be 1 or higher.
+ |      |
+ |      + Difficulty.  Can be one of "BASIC", "ANOTHER", "MANIAC", or "SMANIAC"
+ |
+ + Style.  Can be one of "SINGLE", "DOUBLE", "COUPLE", or "SOLO".  "COUPLE" is 
+   Battle-mode steps.

+ +

Comments can be used by using "//". Everything after this on the same line in the file will be ignored.

+ +

Background Animations, Movies, and Visualizations

+ +

DWI allows for background animations using a special script within the step-file. A script consists of static images, animated images, and/or an AVI movie. Using the script, you can create a variety of layered effects. A sample animation is described below: +

+   #BACKGROUND:
+
+     M:MOVIE:.\movies\sfx.avi STARTAT:-1.0 LAYER:0;
+     V:VIS:.\Vis\somevis.svp LAYER:0;
+     E:FILE:.\anim\equalizer.png ANIMATE:10,33 POSITION:-33,0 SPACING:40,40 LAYER:1;
+     D:FILE:.\anim\dancer-m1.png ANIMATE:24,66 SIZE:2 MULT:0,0.5,1 SPACING:30,30 LAYER:1;
+     X:LAYER:1 OFF;
+
+     SCRIPT:M.......................
+            ................E...............
+            D...............X,V...............E...............D...............
+            X,M...............E...............D...............X,V...............
+            E...............D...............X,M...............E...............
+            D...............X,V...............E...............D...............
+            X,M...............E...............D...............X;
+
+   #END;

+ +

The first part of the "BACKGROUND" definition defines the effects. Each effect is attributed to a letter or number ("a-z", "A-Z", "1-9"). The format for defining an effect is:

+ +

+ + + + + + + + + + + + + + + + + + +
The first four tags cannot be used together...
FILE:   path to a file. Either a still image, or an animation (multiple frames of animation are stacked *vertically* in the image).
MOVIE:   path to a standard Windows AVI file. Note that the movie won't play unless you have the right codecs installed in Windows. Movies are currently stretched to fill the whole screen.
VIS:   path to a Sonique Visualization plug-in (SVP). Visualizations are currently stretched to fill the whole screen and are always put on Layer 0, and no other commands will affect it.
OFF   turns off a layer, effectively making it invisible. Will not turn off layer 0.
 
LAYER:l   the layer to use (required): +
    0 - base layer.  
+        (Image/Movie is always tiled and SPACING is ignored).
+    1 - overlay layer
+    2 - overlay layer
+    3 - overlay layer
 
STARTAT:t   number of seconds into the AVI file to start at. If negative, the movie will wait that many seconds before playing. Can be decimal (eg. 1.3 = 1300ms).
MULT:r,g,b   Red, Green, and Blue pixels in the image/movie are tinted by the given amounts. This way the same image/movie can be used multiple times across DWI files and have different colours.
ANIMATE:f,n1,n2,...nF   indicates that the FILE contains multiple frames of animation. "f" is the number of frames of animation. Each following value is the number of milliseconds each frame of animation is displayed. If not enough time-values are given, the last given value is used. Ignored for MOVIE type.
MOVE:x,y   the image/movie is moved by the given number of pixels every millisecond.
SPACING:x,y   images are always tiled if they don't fill up the screen. This tag allows you to add some spacing between the images by the given number of pixels horizontally and vertically (Layer > 0)
SIZE:s   multiplies the image size by 's' in both directions. Must be a whole number.
KEEPPOS   normally when a new effect is turned on, its position is reset. This tag keeps the layer where it is, useful for keeping images moving smoothly.
KEEPTIME   (MOVIEs only) normally when a movie starts, it starts from the beginning or the time given in the "STARTAT" tag. Adding this tag will keep it playing so when that layer is enabled again, it will have kept going.

+ +

Following the effect definition, comes the actual animation script. This is a sequence of characters in a similar way as the step-patterns are given - each character normally is 1/8 of a beat, though brackets can be used to change the time-values. In this way, background animations can be syched to the steps. It is suggested that the steps for "SINGLE:BASIC" are copied to after the "SCRIPT:" tag, and then the effects be set. In this way one knows that the script will match the same length of the music.

+ +

The animations take effect as that point in the song is reached. Multiple effects can occur at the same time if they are separated with a comma. A period (.) means no new effect should take place at that point. A zero (0) turns off all effects and returns the background to the original graphic.

+ +

More Information

+ +

Please check our website for more information and links to useful resources.

+ +

5. NONSTOP MODE AND CRS FILE FORMAT

+ +

DWI uses special CRS files that should be put in subfolders of the "Courses" directory. Now courses +can be shared with others if they have the same files and directory structure as you.

+ +

CRS files are similar to DWI files in structure. The file defines the basic details about the course, such as its name and which songs should be played. Currently these tags are supported:

+ +

Required tags:

+ +

+ + + + +
#COURSE:...;   the name of the course.
#DISPLAYCOURSE:...;  alternate name of course that can include special characters. Similar to #DISPLAYTITLE and #DISPLAYARTIST in DWI files.
#SONG:...;  

defines a song in the course. This can either be a selection from the Player's Best (or Worst), a Random stage or a predefined stage. The syntax for each is given below: +

    PLAYER'S BEST/WORST STAGE:
+    #SONG:BESTx:[BASIC|ANOTHER|MANAIC|SMANIAC];
+    #SONG:WORSTx:[BASIC|ANOTHER|MANAIC|SMANIAC];
+    - choose a song with the given index 'x'.  So BEST1 is the most popular
+      song, and WORST5 is the 5th least popular song.  If the given 
+      difficulty is not available, DWI will choose the next closest difficulty.
+      Songs that are equally popular will be put in random order.
+
+    RANDOM STAGE:
+    #SONG:*:[a]|[a..b];
+    - choose a random song, with a difficulty rating equal to or between 'a' and 'b'.
+    - if only 'a' is given, 'b' is assumed to be the same as 'a'.
+
+    #SONG:*:[BASIC|ANOTHER|MANIAC|SMANAIC];
+    - choose a random song with a given difficulty level.
+
+    #SONG:folder\*:[a]|[a..b]|[BASIC|ANOTHER|MANIAC|SMANIAC];
+    - choose a random song from a given folder.
+                   
+    DEFINED STAGE:
+    #SONG:<FOLDER>\<SONG TITLE>:<DIFFICULTY>;
+    - will use a song from <FOLDER> with the given title.
+      So to play a song called "My Song", which is in 
+      './Songs/Default/mysong/mysong.dwi', on MANIAC, 
+      you would say:
+
+      #SONG:Default\My Song:MANIAC;

+ +

NB: Either the TITLE or folder the DWI file is in can be used.

+ +

In addition, modifiers can be defined for each song by adding a list of comma-separated values to the end of the #SONG line. These modifiers are the same as listed above, plus +

+     xRANDOM   - where 'x' is the number of random effects to apply.
+                 'x' can be 1 to 7.
+     AWARDx    - where 'x' is the number of lives to award after 
+                 finishing the stage.
+

+

So to play "My Song", Maniac, with 2.0x, Left, Hidden, and with one random effect, use:
+#SONG:Default\My Song:MANIAC:2.0x,LEFT,HIDDEN,1RANDOM;

+ +

Optional tags:

+ +

+ + + + +
#REPEAT:...;   can be "YES" or "NO". If set, starts course over from the beginning after last song.
#COMBO:PERFECT;   during play, the combo counter will only go up if a "PERFECT" is made.
#COMBOMODE:1;   sets how much is added to the combo counter for jumps. Can be 1 or 2.
#LIVES:4;   sets the number of 'lives' given to each player at the start of game play. After each stage is cleared, a given number of lives is added, either by a value specified by the "AWARDx" tag in the CRS file, or using the scale below: +
    Song was 6 feet or less - 1 life.
+    Song was 7 or 8 feet    - 2 lives.
+    Song was 9 feet or more - 3 lives.
+

+ +

At the course selection screen, courses that have songs without steps for the current style (SINGLE, DOUBLE, etc) will be filtered out. Courses are loaded when DWI starts.

+ +

6. LRC (LYRICS) FILE FORMAT

+

DWI can display lyrics during a song if it finds a .LRC file in the same folder as the step-file. The file should have the same file-base as the .DWI file - so, for example, if your DWI file is called "mysong.dwi", the lyrics file should be called "mysong.lrc".

+ +

This file is a simple text-file that tells the program what text to display and when. It can also define the colour the text is displayed in.

+ +

Each line starts with a tag in the format [xxxxxx]. Currently, these tags are supported:

+ +

+ + + + +
[COLOUR]   Sets the colour for the following text. After the tag, a colour value is given in hex (ie. yellow would be 0xFFFF00). Up to 10 colour values can be given, separated by commas.
[offset:xxxx]   Makes timestamps following this tag have their times adjusted by 'xxxx' milliseconds. Use to fine-tune timings for lyrics.
[MM:SS.ss]  

Sets a time. The text following the tag will be shown on the screen after this time has passed, replacing any text that was there before. To clear text, provide just a tag with no text after it.

A line-break can be defined using the pipe "|" symbol.

+

A new colour can be selected from the defined colours by using "{cX}", where "X" is a number from 0 to 9.

+

+ +

Sample LRC file:

+

[0:00.00]aye-aye-aye|aye-aye-aye|aye-aye-aye
+[0:05.30]Where's my samurai?
+[0:07.00]
+[COLOUR]0xffff00
+[0:13.50]I've been searching for a man
+[0:16.00]All across Japan.
+...etc...

+ +

7. LIMITATIONS

+ +

Partly due to the compiler and my own lack of knowledge in some areas, there are a number of limitations +imposed on the program that users should know about:

    +
  • No more than 2048 songs. +
  • No more than 64 sound effects in a single subdirectory of 'soundfx' +

+ +

If the program runs slowly on your machine, try the following:

    +
  • Install the latest DirectX 8.1 drivers. +
  • Update the video drivers for your video card. +
  • Try running the game in fullscreen mode, and/or setting your screen resolution to 16-bit mode. +
  • Lower the sound quality to Mono, 8-bit, and/or 11 or 22Khz. +
  • Lower the quality of background movies if you use them a lot. +
  • Try limiting the framerate (/fps:xx). +

+ +

8. VERSION HISTORY

+ +

v2.49.00 - May 22, 2003.
+            - NEW: Addition of "Player's Best" and "Player's Worst" to CRS file format.
+            - NEW: Expanded functionality of random song selection in CRS files.  You can now
+              choose a random song by difficulty (instead of just foot ratings), and also select a 
+              random song in a particular folder
+            - NEW: Courses are now arranged in subfolders, allowing for different groupings of 
+              courses.  One set could be for nonstop, others for challenge; or you can divide the 
+              courses up by mix or genre, etc.  You can also give each folder its own banner, like
+              in the song select interface.
+                 NOTE: You will have to move your existing courses into subfolders for them to 
+                 be recognized!
+            - NEW: #DISPLAYBPM:[xxx..xxx]|[xxx]|[*]; added, to force a certain display type on 
+              song select screen.
+            - NEW: For users with old videocards that can't display semi-transparent images, you 
+              can now turn off the dithering effect that DWI uses if you like.  Use the 
+              '/dither:0' command line argument.
+            - Tweaks to how #RANDFOLDER:...; behaves, plus program now searches folder DWI file 
+              is in for a "Movies" sub-folder, or AVIs in the same folder first before using the 
+              default /Movies/Random folder.
+            - Tweaks to banner display on Evaluation screen (for when song/course had no banner)
+            - Tweaks to record-display for courses.
+            - Tweak to beat-display in-game and in developers mode, so numbers won't 'jiggle'.
+            - BUGFIX: 'tiled images' on song-select screen (BPM, stage #, difficulty) and during 
+              gameplay on some old videocards has been fixed.  You should probably consider 
+              upgrading to a better card though anyway. ;^)
+            - BUGFIX: Can now have up to 512 courses, instead of 64.  Oops. ;)
+            - BUGFIX: "combo continuing" playing on every step past 9999 combo.  BTW, I hate you. ;)
+            - BUGFIX: Game doesn't crash on entering course-select screen after you've added new 
+              CRS files.
+            - OTHER: Other bugfixes and tweaks that I can't begin to remember. :P
+
+v2.41.00 - February 15, 2003.
+            - CHANGE: Drawing of text made more efficient and slightly more readable, through better 
+              drawing of drop-shadows.
+            - CHANGE: textures for SVP plug-ins to draw to now adjusted to nearest multiple of 2, as I 
+              suspect some assume it's supposed to be like that for efficiency reasons, and otherwise 
+              might cause problems overrunning memory.
+            - BUGFIX: DWI2.log file now created properly again.  (d'oh!!!)
+            - BUGFIX: problem drawing certain images in 32bpp SDL mode fixed (eg. BPM display, star-wipe)
+            - BUGFIX: extra 'N/A" box no longer appears in Solo mode "Select Profile" if started with P1.
+            - BUGFIX: Better freeing of music samples after gameplay, credits, and on song-select screen.
+
+v2.40.00 - February 2, 2003.
+            - NEW: Addition of "User Profiles", a system to keep user-specific records and high 
+              scores similar to the 'name entry' system from DWI1, but with more features.  Individual
+              users can tailor their own icon and (if directories are the same across systems) take 
+              their records with them between machines.  Now tracks personal high scores and overall
+              high scores, all viewable in the Records screen. (Can be disabled in Options menu if you
+              prefer not to use it).
+            - NEW: Arrow set for DWI completely redone to feature true colour-cycling arrows like the
+              arcade.  Also, arrows are drawn in last-to-first order now instead of first-to-last.
+              (NB: Thanks to uKER for the help creating the new arrow set).
+            - NEW: You can pause the game with the "Pause/Break" key.  However, like autoplay, high
+              score will not be saved.
+            - CHANGE: Folder-specific banners treated differently - now DWI looks for a PNG file with 
+              the same name as the sub-folder, in the base "Songs" folder.  Should be easier to 
+              manage the banners all in one folder now.
+            - some freeze arrow behavior tweaked.
+            - shading on song-select wheel made less dark.
+            - more details on LRC file support added to this file.
+            - style icon colours in default skin fixed (they were reversed).
+            - if you pass a song reasonably well, you'll get that cheer as the 'Cleared' text appears.
+            - BUGFIX: strange wrapping in View Records/Nonstop mode for some songs with two lines fixed.
+            - BUGFIX: Song titles and artist names with special characters on Nonstop mode now display
+              correctly
+            - BUGFIX: Timing in Developer mode after adjusting GAP fixed.  Actually tested it this time. ;)
+            - BUGFIX: Realigning the word 'Test' in developer mode.
+            - BUGFIX: /startat in developer mode is more accurrate.
+            - BUGFIX: Bonus CRS files don't 'skip' songs that are next to each other in the songlist.
+            - VARIOUS: other small tweaks I can't remember. ;)
+
+v2.30.01 - January 3, 2003.
+            - AVI and SVP decoding optimized slightly to reduce load on main game function.
+            - flag added to turn off shading on song select wheel, if desired.
+            - BUGFIX: "Game Over" back in on failing in regular mode.  Oops.
+            - BUGFIX: "NEW!" status works.  Expires after 2 weeks now.  May require songlist reset.
+            - BUGFIX: animation thread closes properly between stages.
+            - BUGFIX: steps are judged better again.  Oops x 2.
+
+v2.30.00 - January 1, 2003.
+            - NEW: Implemented Sonique Visualization Plugins (SVP) for background animations.
+            - NEW: Folder- and Genre- specific banners, plus banners for Roulette 
+                   and Title/Artist sort options.
+            - NEW: Sort by difficulty added to Song Select screen.
+            - NEW: Multiple colours on same line of lyrics possible.
+            - NEW: Can adjust the number of stages between breaks in Nonstop Mode.
+            - NEW: Ability to disable Background Scripts.
+            - NEW: Ability to set default sort method.
+            - New 'default' banners and backgrounds.
+            - Banner and Sample Start load time reduced.
+            - Sort by BPM now much faster.
+            - Paths in Background Scripts can now have spaces (use quotes around path).
+            - Addition to Background Script commands to use Visualizations (on Layer 0).
+            - Long song names with special characters now wrap.
+            - Options Screens reorganized to group some things better.
+            - Adjustments to GAP in Development mode handled properly if changed in DWI file.
+            - Ability to change method for drawing movies/etc. to older method (slower, but good
+              for old videocards that just give solid-colour images instead now).
+            - CRS files can take either title or directory now.
+            - Stage number/display now graphical, and colours can be assigned in skin CFG file.
+            - "TAB" can be used in song-titles to force line-wrap.
+            - Font updated to include missing '~' character.
+            - Song select wheel now has some extra shading.
+            - Support for semi-transparant images on older videocards improved by addition of 
+              pattern dithering instead of simply "off" or "on".
+            - BUGFIX: Missing '0's in scores during gameplay.
+            - BUGFIX: Rounding of scores to proper multiples of 10000000 on some processors.
+            - BUGFIX: Early "GOOD" judgement on a freeze arrow + jump combination fixed.
+            - BUGFIX: "New" tag treated properly again.
+            - BUGFIX: Random AVI search assumed any file was an AVI, without checking extension.
+            - BUGFIX: Skin CFG file with Hex values in uppercase read properly now.
+
+v2.20.30 - November 30, 2002.
+            - General performance improvements.
+            - Options left-over from main game removed in demo.
+            - Command-line options added for fine-tuning memory usage (WinNT/2k/XP).
+            - Time displayed in developer mode should be correct now at different speeds.
+            - Can disable lyrics from the Options menu.
+            - BUGFIX: Genre tag correctly parsed again.
+            - BUGFIX: GeForce/Detonator drivers bug fixed.
+            - BUGFIX: Corrections to Lyric file handling (timestamps, no return after last line)
+
+v2.20.10 - November 21, 2002.
+            - Lyrics now displayed in Test mode
+            - Lyrics now enabled for songs with positive GAP values
+            - SMANIAC songs selectable in extra stages even if /showsm not used.
+            - STREAM bar glows on final tally screen if you've AAA'd all songs(!)
+            - backgrounds and banners with upper-case extensions now recognised correctly
+            - in addition to PNG files, JPGs and BMPs can be used as backgrounds.
+            - "OK" flash for Reverse-scrolling arrows added
+            - Songlist.html only written if files added/updated/deleted
+
+v2.20.00 - November 20, 2002.
+            - NEW: "Final Tally" screen added if number of stages not set to "Unlimited".
+            - NEW: Timer added to developer mode.
+            - NEW: Support for lyrics during songs added through use of "LRC" files.
+            - NEW: "/skipsearch" command line argument added.
+            - Ability to reset songlist completely from Options Menu.
+            - BUGFIX: Groove Radar values calculated correctly again.
+            - BUGFIX: "Lost life" sound playing during Arcade mode removed.
+            - BUGFIX: Sample now played when combo jumps from 99..101.
+            - BUGFIX: "Skipped" notes in autoplay fixed.
+            - BUGFIX: Stream bar glows in Evaluation Screen if full combo and combo mode set 
+                      to "ORIGINAL"
+            - BUGFIX: Folders with no files in them handled better when searching for files.
+
+v2.10.00 - November 12, 2002.
+            - NEW: Songlist rebuild is now automatic and time for incremental updates has been
+                   dramatically reduced, as the whole song database does not get rebuilt from 
+                   scratch each time now.  (NB: Special thanks to uKER for his code that 
+                   implements this).
+            - NEW: Extra stages implemented - extra stages can be defined in CRS files, or 
+                   random songs are chosen automatically.
+            - NEW: Extra character support in song titles, course titles, and artist names
+                   now possible with new tags to DWI format.
+            - NEW: Various drop-shadow colours can be defined in the skin-configuration file.
+            - NEW: "Flash" added for "OK" on freeze-arrows.
+            - NEW: DWI now uses version 1.7 of the BASS sound library.
+            - NEW: "/dark" added for Developer mode.
+            - NEW: "+" modifier added to "#SAMPLESTART:" tag - the GAP value is used as a 
+                   reference.
+            - Autoplay now possible in Nonstop mode.
+            - Centre positions for combo and judgement displays adjusted.
+            - movie decoding performance improved slightly.
+            - game starts at a default of 60FPS now.  Adjust with '/fps:xx' command-line.
+            - selecting difficulty on song-select screen requires discrete button presses, so
+              it won't cycle accidentally.
+            - BUGFIX: 'empty' space below song-names on Course selection screen corrected.
+            - BUGFIX: Various graphical glitches corrected.
+            - BUGFIX: 'negative percentages' in Nonstop mode fixed.
+            - BUGFIX: 'broken freeze arrows' glitch fixed.
+            - VARIOUS: various other tweaks and fixes that I can't remember. ;)
+
+v2.03.00 - September 12, 2002.
+            - NEW: 'Global GAP' adjustment added to System Options (affects all files)
+            - NEW: Ability to reset 'Player's Best" list added to Options.
+            - NEW: Rebuilding songlist also creates 'dwi2-songlist.html', for easier reference.
+            - colour for random songs in Nonstop mode brightened.
+            - switching from a song with CHALLENGE steps to one without that set reverts to HEAVY, not LIGHT.
+            - small graphical bug with freeze arrows ending cleaned up.
+            - freeze arrow graphics updated for up-left/up-right.
+            - new Nonstop course banner to replace the old ugly one. ;) (thanks, Cave)
+            - more Q/A added to FAQ.html
+            - BUGFIX: Scoring precision improved to make 'AAA'd songs add up correctly.
+            - BUGFIX: extra 'ticks' being played with "Little" mode on.
+            - BUGFIX: 'invisible' steps being played when Autoplay was on in "Little" mode.
+            - BUGFIX: jumping to a specific spot with different speeds in Developer mode corrected.
+            - BUGFIX: starting a song with "Start" in SDL mode won't automatically take you to Options screen.
+            - BUGFIX: arrows loaded correctly when switching skins again.
+
+v2.02.00 - August 16, 2002.
+            - NEW: Freeze arrows with normal steps at same time have both arrows in 
+                   freeze-colour.
+            - NEW: Up-left and up-right arrows in Solo mode redone to match other arrows.
+            - NEW: SOLO arrow set available in Options.
+            - NEW: Rebuilding Songlist now provides information on status 
+                   instead of appearing to 'freeze'.
+            - Numeric Keypad's 'ENTER' key now re-enabled.
+            - BUGFIX: Grading system fixed ('points' value correctly calculated now).
+            - BUGFIX: Problem with 'skipped' steps not registering in Nonstop mode fixed.
+            - BUGFIX: ESCAPE handled better under new keyboard method.
+            - BUGFIX: Can now exit developer mode properly.
+            - BUGFIX: problem with REVERSE and HIDDEN in CRS files fixed.
+            - BUGFIX: locking up in some DWIs with animated backgrounds fixed.
+            - BUGFIX: jumps treated correctly again.
+
+v2.01.10 - August 12, 2002.
+            - '/showsm' will show SMANIAC-only songs on the select screen, otherwise they're hidden
+            - All keys now read using DirectInput (or SDL) instead of using old Windows interfaces.  So 
+              problems with Escape and F1..F12 should be fixed now.
+            - BUGFIX: doubling of time in Nonstop Versus mode fixed
+            - BUGFIX: lives added properly now in Nonstop Doubles and Solo modes.
+            - BUGFIX: after rebuilding songlist, starting in Single mode should behave now.
+
+v2.01.00 - August 11, 2002.
+            - NEW: Press up-left ("sort") button on Results screen to switch to percentage-display
+            - NEW: Credits screen finally added.  Thanks to all who have helped. :)
+            - NEW: Support for more than two panels at a time in a jump.  (DWI specification tweaked slightly)
+            - NEW: '/v5hack' command-line argument for some strange Voodoo card drivers.  Might
+                   fix problems on Voodoo cards if you can't get it working right.
+            - NEW: Ability to specify number of lives added after each stage in Nonstop mode.  Also changed
+                   default behavior to give back lives in relation to difficulty of song just played.
+            - Groove radar values calculated better; now Chaos gives a better value, and all values are in 
+              relation to the length of the song now (so extended-length songs don't give too-large values).
+            - Songs with only SMANIAC steps are now selectable in regular song-select screen.
+            - If current difficulty selected is 'bumped' when moving to a song that doesn't have that set of 
+              steps, it'll go back to that setting when the next song that does is selected.
+            - Wrapping of song-titles tweaked to wrap on " -", not just "-".
+            - Power bar 'sliding' behavior tweaked.
+            - In Options Menu, currently-selected item is remembered when returning from sub-menus.
+            - Maximum number of songs allowed upped to 2048.
+            - BUGFIX: going to course-select screen after rebuilding songlist should work correctly now.
+            - BUGFIX: starting a song with 'start' on a gamepad won't take you to the options screen unless
+                      you hold it now.
+            - BUGFIX: 'beat' counter behavior fixed for when a BPM-pause/freeze occurs.
+            - BUGFIX: animations should behave now when speed is altered.
+
+v2.00.52 - I released the DirectInput implementation too soon, sorry.  This should solve the
+           issues with DX mode in some operating systems, and SDL mode.
+
+v2.00.5 - August 2, 2002.
+          - I now have WindowsXP... yay... so now I can test DWI in it...
+          - 'white flashes' during video playback fixed.
+          - grading system (rounding) bug fixed... (I think...).
+          - keyboard input now uses DirectInput for most things, instead of Windows functions - 
+            should hopefully be faster and avoid some lag problems some have been experiencing.
+          - second set of keyboard inputs can be configured now.
+          - can't change sort method after choosing "ROULETTE" anymore.
+
+v2.00.3 - July 25, 2002.
+          - fixes a number of graphical problems related to songs with positive GAP values.
+          - groove radar calculations now a bit more tolerant of mistakes in files.
+          - .75x and .5x modifiers corrected in Options screen.
+          - Stealth now selectable through both methods.
+          - New freeze arrow 'flash' animation as earlier version was getting mixed reviews. ;)
+          - fixed Roulette when "Sort by Genre" is used.
+          - Difficulty tweaked slightly.
+          - Failure of stage behaves properly again.
+
+          - IMPORTANT - I meant to do this with the first release of 2.00, but forgot -
+            DWI2's configuration is stored in 'dwi2.cfg', 'dwi2.sng', 'dwi2.rec', etc.
+            IF YOU HAVE BEEN RUNNING v2.00, PLEASE RENAME 'dance.*' 'dwi2.*'.
+            Sorry for the inconvenience.
+
+v2.00.0 - July 22, 2002.
+          - Completely overhauled DWI's interface.  The 'brushed metal' look is out in favor
+            of a new, more colourful design
+          - New, more readable and stylish font
+          - optional timer on gameplay screens to hurry things up
+          - hold 'START' when selecting a song to open up a new 'select options' screen
+            ('SELECT' will still let you change options as before also).
+          - DWI2 has removed old interfaces that I feel are outdated and in the process makes 
+            it much easier to update.  At the same time, the base skin has been updated 
+            considerably. (NB: old skins will not be recognized, sorry...)
+          - Nonstop Mode now keeps track of time, percent, etc.
+          - MAX2 scoring and grading system
+          - Smooth animations for judgements, combo display
+          - New animation for song start/end
+          - Groove Radar implemented (values calculated when Songlist is rebuilt)
+          - Roulette added to song-select screen
+          - 5th/MAX-style power bars and gameplay interfaces, freeze arrows, etc.
+          - completely redone evaluation screen
+          - usernames taken out - they were a pain to put in anyway
+          - Song banners now used on song-select screen if available.  Can be horizontal or
+            old diagonal-style (backgrounds used as before if no banner found)
+          - Records screen now keeps track of Nonstop records too
+          - new option '/fps:xx' lets you set a maximum framerate (20..100); saves processor 
+            time for other applications if you've got a fast machine
+          - multiple bugs fixed.
+
+SPECIAL NOTE: DWI 2.0's skins require a file called 'dwi2-skin.cfg' to work.  This is done
+              to avoid accidentally choosing an old skin.
+              The Sounds folder is very similar, but with new samples for some things.  Users
+              upgrading from 1.7 and lower should run 'convert.bat', which does the following:
+                 1) copy all files from \eval\S to \eval\SS
+                 2) rename \eval\SS \eval\AA
+                 3) rename \eval\SSS \eval\AAA
+                 4) remove \eval\S
+                 5) move all files from \select\song to \start\ready
+                 6) remove \select\song.  (You can also delete \select\new)
+
+v1.70.0 - June 17, 2002.
+          - New method for creating Nonstop Mode courses - introduction of "CRS" file format.
+            This should allow for easier creation of Nonstop Mode courses.  See below for details.
+          - Removed all old Nonstop-mode sections.
+          - New Nonstop Course selection screen.  Banners can be given to a course.  Also allows for 
+            playing defined courses in different modes.
+          - Two people can play Nonstop mode courses at the same time.
+          - Better record keeping for Nonstop mode courses.
+          - Style Select Screen modified.  SOLO mode is now selected by pressing up/down there.
+          - New "Failed" sequence - arrows stop and fade out now instead of still scrolling.
+          - Freeze arrow behavior tweaked.
+          - Combo system can be chosen in Options Screen.
+          - New command line argument "/sdevice:x" can tell DWI what sound device to use.
+            (view dance.log to see a listing of available devices first).
+
+v1.65.5 - June 7, 2002.
+          - Added sound effect for when you lose a life in Nonstop "Combo" mode.
+          - Updated freeze arrows to behave more like MAX.
+          - Freeze-arrows don't do as much damage as they used to. ;)
+          - MAX-like combo system.
+
+v1.65.0 - May 26, 2002.
+          - Added random background animations.  Put looping AVIs into ./Movies/Random
+            and DWI will use them automatically in the backgrounds for songs with 
+            no background script.
+          - Random animations can be enabled/disabled in the System Options.
+          - Addition of four new tags to DWI files:
+             #RANDSEED:x;     - provide a number that will influence what AVIs DWI picks.
+                                Will be the same animation each time if AVI filenames and count
+                                doesn't change (default is random each time).
+             #RANDSTART:x;    - tells DWI what beat to start the animations on.  Default is 32.
+             #RANDFOLDER:...; - tells DWI to look in another folder when choosing AVIs, 
+                                allowing 'themed' folders.
+             #RANDLIST:...;   - a list of comma-separated filenames to use in the folder.
+
+          - Ability to tweak timings for judging Perfect, Great, etc. steps in System Options.
+          - New "Select Style" interface added (default now for "DWI (Second Interface)" skin).
+            Use "SelectStyle=2" under "[GENERAL]" in the 'dwi-skin.cfg' file to enable.
+          - Crowd cheers or moans during gameplay based on performance.
+          - Music loop added to "Select Style" screens.
+          - Routine for displaying background animations put into separate thread now.
+          - New command-line argument: '/priority:x' can force DWI to run as a more "important"
+            program under Windows.  "1" starts it as "ABOVE NORMAL", "2" is "TIME CRITICAL".  May
+            improve performance in certain cases.
+          - BUGFIX: Selecting an SMANIAC song after a previous one in 1st Interface fixed.
+          - Other various bugfixes that I can't remember. ;)
+
+v1.62.3 - May 6, 2002.
+          - Minor bug fixes.  Main change is a tweak to the /test: command line arguments to 
+            accommodate folders on other drives to faciliate step-file creator authors.
+
+v1.62.2 - April 18, 2002.
+          - Speed of song can now be set to faster than normal play using F3/F4 during gameplay or 
+            at song select screen (1..5..9).
+          - bug fix: BPM shift won't reset background animation.
+          - bug fix: GAP adjustment should behave better now.
+          - More developer functions added:
+              /startat:

+ +

9. FUTURE DEVELOPMENT AND THANKS

+ +

A long time was spent making this program, and I believe that this first release is fairly complete in terms of features. New features will be considered as resources and interest permit.

+ +

Special thanks go to DjDraftHorse for the announcer files - I think he did a fantastic job, very professional. Also he has been a great beta-tester and a sounding board for new ideas. Much appreciated!

+ +

Also, a huge 'thank you' to BemaniRuler for beta-testing the program and your enthusiasm for the project. He's been a great help in creating the new interfaces and I appreciate him letting me incorporate some of his graphics from his earlier skins in the release of DWI 2.0.

+ +

Thanks also to Durikkan for his help in implementing the Groove Radar - the values used are based off of his algorithm.

+ +

BBW, for putting up with my incessant programming of the simulator and my exhorting of the joys of Bemani. ;)

+ +

LagGed and the others at "The Melting Pot" for the resources available there concerning the file formats and other simulators, and his offer to host the distribution files. uKER for taking it upon himself to write some better code for song-management which I was able to implement into the main DWI code. YrevaTeneb for his writeup on how to create DWI files at the Melting Pot, and for permission to list it here. Also a special thanks to Apocalypse for his insight in getting DirectX working.

+ +

Pawwaves to those in the furry community. :^)

+ +

Enjoy...
+SimWolf.

diff --git a/Docs/SimfileFormats/KSF/_src.txt b/Docs/SimfileFormats/KSF/_src.txt new file mode 100644 index 0000000000..362fa378b9 --- /dev/null +++ b/Docs/SimfileFormats/KSF/_src.txt @@ -0,0 +1,5 @@ +ksf-format.txt = http://kai.vm.bytemark.co.uk/svn/pydance/trunk/pydance/docs/ksf-format.txt + +[not in repository but good reading] +http://worldance.us/foro/archive/index.php?t-1647.html (Spanish; Direct Move KSF) +http://www.ph-online.net/html/ph_newspage_v3_09.html ("Explanation of KSF Pump It Up Step Format" by Turkeyslam) \ No newline at end of file diff --git a/Docs/SimfileFormats/KSF/ksf-format.txt b/Docs/SimfileFormats/KSF/ksf-format.txt new file mode 100644 index 0000000000..4ad838f457 --- /dev/null +++ b/Docs/SimfileFormats/KSF/ksf-format.txt @@ -0,0 +1,157 @@ +Documentation on the KSF Format +------------------------------- +The KSF format is designed for representing steps for 5 panel diagonal +dancing games, such as Pump It Up. It was originally used in the Kick It Up +simulator, but can also be parsed by other programs. However, this seems +to be the only actual format description available. + +The intention of this document is not to encourage creation of KSF files. +I believe the format to be broken, and provide this reference only for +people wishing to implement legacy file readers. Any new 5 panel dancing +patterns should use a well-defined format such as .dance or .sm. + +Directory Layout +---------------- +KSF filenames are case-insensitive. + +A KSF directory contains the following files: + +- At least one file matching *.KSF, containing the step data. +- A file named SONG.MP3, SONG.WAV, or SONG.OGG. +- A file named INTRO.MP3, INTRO.WAV, or INTRO.OGG, containing a sound clip, + used to preview the song in song selectors. +- Disc.bmp, a 300x200 image used in song selectors. +- Back.bmp or Title.bmp, a 640x480 image used as a background during the song. + +KSF directories may not have a special naming format, but some simulators +will use the directory name to get the artist and title name, if it's not +available in the KSF files themseleves. The format is "Title", +"Title - Artist", or "Title - Artist - Difficulty". Difficulty can be +ignored here, as it can be gotten from the KSF filename. Using the path +name to determine the metadata for the song should only be used if it's +not available in #TITLE. + +Concievably other audio or image formats could be used. None have been +seen in the wild. + +KSF Filenames +------------- +KSF filenames describe the game type and difficulty. Each file holds the +data for only one level of difficulty. There are two possible forms of +the name: **.ksf, or *_*.ksf. + +The first type is used for double mode, and half-double mode. Double.ksf +contains the steps for "Double" mode, where one player uses both paths. +Stepmania supports Halfdouble.ksf, which ignores the outer 4 panels. + +The latter type is used for single ("unison", which is not the same +as Dance Dance Revolution's Unison mode in early mixes) steps, where both +players have the same steps, and couple steps, where players have different +ones. If the player number is 1, they are single steps; if it's 2, they're +couple steps. Difficulty is a difficulty name. + +KSF Headers +----------- +The basic KSF format is similar to DWI, SM, and MSD. Metadata is given +in the format of: +#TAGNAME:VALUE; + +The exception being the #STEPS tag, which has a newline between the ":" +and the first line of steps, and ends in "2222222222222" on a line by +itself instead of ";". + +KSF files seem to use CRLF (Windows-style) line termination. The vast +majority of KSF files are in CP942/KSC 5601 encoding, but some are +in EUC-KR. If ASCII alternatives are needed for these encodings, the +path name must be checked as above. + +Common headers in KSF files are as follows: + +#TITLE: The artist and title of the song, and sometimes the difficulty. +These are separated by " - "s, so the format is either "Title", +"Artist - Title", or "Artist - Title - Difficulty". Information missing +from this line can be filled in via path or file names. + +#BPM: The BPM of the song. This is analogous to the BPM value for every other +dance format. + +#STARTTIME: The time into the song to offset events, in centiseconds. This +is the opposite of .dance's gap and .sm's offset, and the same as .dwi's +gap (although they use different units). + +#TICKCOUNT: Each step line specifies 1/TICKCOUNT beats. That is, if +TICKCOUNT is 1, each line is the equivalent of a 'q' in .dance. If it's +2, each line is the same as a normal length note in DWI (an 'e' in .dance). + +#STEP: Until a line of "2222222222222" is encountered, each line after this +one represents a set of steps. + +Step Lines +---------- +Each line in the step section represents one "line" of steps, like SM +or .dance. Each line is 13 digits long; in single (unison) modes, only the +first 5 are used; in couple and double, the first 10 are used. + +The order of the steps is Down Left, Up Left, Center, Up Right, Down Right. +The second player's (or second pad in double) steps are the same order, +but in positions 6-10 instead of 1-5. + +A 0 in a position indicates no step. A 1 indicates a regular step. A 4 +indicates a hold, for as long as a 4 is found in that column. The hold +ends on the beat of the last 4, not on the first 0. + +Some files have been seen with repeated '1's in this manner as well; +it is unknown if any dance simulator supports this use of KSF, and since +a perfectly good non-ambiguous means of representing holds is available, +its use is not recommended. + +A 2 (or a line of 13 2s) indicates the end of the step pattern. + +BPM Changes +----------- +BPM changes are handled by header values; they are specified by a pair +of values #BPMx and #BUNKIx, where x is an integer. An example is: + +#BPM:146.10; +#BPM2:180.20; +#BPM3:195.00; +#TICKCOUNT:2; +#STARTTIME:0; +#BUNKI:4200; +#BUNKI2:10000; + +BPMn+1 starts at the time specified in centiseconds by BUNKIn (where n +is omitted if it is 1). In the above, 42 seconds (4200 centiseconds) +into the song, the BPM changes from its initial 146.1 to 180.2, and +then 100 seconds into the song, from 180.2 to 195. + +BUNKIs can be a decimal value. + +Syntax Exceptions +----------------- +Unlike DWI files, KSF files seem to have few exceptions or violations of +their syntax in the files seen in the wild. This may be because the format +is so mind-numbingly stupid. + +Still Unknown +------------- +Some files contain a #STARTTIMEx (like #BPMx or #BUNKIx). + +KSF step lines are 13 digits wide; only 10 digits appear to specify steps, +but the last 3 are not always 0. They probably represent something. + +Author +------ +This document was written by Joe Wreschnig . It is +released into the public domain. + +Changes +------- +2003.08.15 + - Initial check in / release. + +Acknowledgements +---------------- +This document is based primarily off of extensive work done by Matt Reppert. +The Stepmania KSF loader source code (src/NotesLoaderKSF.cpp) also proved +useful in verifying some information. diff --git a/Docs/SimfileFormats/README b/Docs/SimfileFormats/README new file mode 100644 index 0000000000..cd2bfbade0 --- /dev/null +++ b/Docs/SimfileFormats/README @@ -0,0 +1,11 @@ +This folder contains information on various simfile formats that exist. + +BMS: Be-Music Script, typically used for beatmania files. +DWI: Son of MSD, created for the Dance With Intensity simulator. +KSF: Another son of MSD, created for the Kick it Up simulator, with extensions + added by Direct Move. +SDF: .sm derivative used in Pocket DDR. + +misc.txt describes some formats that don't have directories. +PMS: Like BMS but for pop'n music. +Dance: pydance format; see dance-spec.txt for more information. \ No newline at end of file diff --git a/Docs/SimfileFormats/SDF/SDF.txt b/Docs/SimfileFormats/SDF/SDF.txt new file mode 100644 index 0000000000..aa28773264 --- /dev/null +++ b/Docs/SimfileFormats/SDF/SDF.txt @@ -0,0 +1,67 @@ +Used by Pocket DDR (http://www.stepmania.com/forums/showthread.php?t=6621). +Basically a compressed version of a .SM that includes the banner and background +in the file as well. + +{Banner} +{Background} +{SDF data} + +When running SM2SDF.exe with /log, the process looks like this: +------------------------------------------------- + SM 2 SCF Converter v.1.0 by Robot2037 +------------------------------------------------- + SM File: test.sm + Loading file test.sm...done. + [LOG] parsing SM file + [LOG] songTitle = test song + [LOG] songSubTitle = a remix + [LOG] songArtist = kurt angle! + [LOG] songCredits = aj jelly + [LOG] songBanner = ssc-banner.png + [LOG] songBackground = ssc-bg.png + [LOG] songOffset = -0.060 + [LOG] songBPMs = 0.000=93.810; + [LOG] songStops = ; + [LOG] parsing stepcharts + [LOG] difficulty 0 stepchart found, step difficulty = 2 + [LOG] difficulty 1 stepchart found, step difficulty = 4 + [LOG] difficulty 2 stepchart found, step difficulty = 6 + [LOG] difficulty 3 stepchart found, step difficulty = 10 + converting... + [LOG] converting song properties + [LOG] converting BPMs + [LOG] converting stops + [LOG] converting offset + [LOG] converting stepcharts + [LOG] converting stepchart 0 + [LOG] converting done + [LOG] converting stepchart 1 + [LOG] converting done + [LOG] converting stepchart 2 + [LOG] converting done + [LOG] converting stepchart 3 + [LOG] converting done + compressing stepchart 0 [ 576 -> 39 ] + compressing stepchart 1 [ 576 -> 71 ] + compressing stepchart 2 [ 576 -> 167 ] + compressing stepchart 3 [ 576 -> 233 ] + Converting image ssc-bg.png...done. + Converting image ssc-banner.png...done. + Writing file test.sdf...done. + +test_sm2sdf.sm is the equivalent of test.sm in the above example. +test.sdf is the output file, with two BPMs. +test-1bpm.sdf is an output file with only one BPM change (and a changed offset). +the two images are included as well. +-------------------------------------------------------------------------------- +A cursory glance at the steps part of the .SDF shows this: + +0x00-0x04: [000204060A] +0x05-0x??: Title (first byte is number of characters/length of string) +then Subtitle, Artist, and Credit follow the same pattern. +That's followed by the Offset. +1.000 = 0x0003E8. -0.060 = 0x01003C. +I think they call this binary coded decimal. + +After that is the number of BPMs, presumably followed by those BPMs. +0x0007D0=0x0A2C2B == #BPMS:2.000=666.667; +I'm just not sure how they're picking the places to store the decimal. \ No newline at end of file diff --git a/Docs/SimfileFormats/SDF/ssc-banner.png b/Docs/SimfileFormats/SDF/ssc-banner.png new file mode 100644 index 0000000000..c315a980d9 Binary files /dev/null and b/Docs/SimfileFormats/SDF/ssc-banner.png differ diff --git a/Docs/SimfileFormats/SDF/ssc-bg.png b/Docs/SimfileFormats/SDF/ssc-bg.png new file mode 100644 index 0000000000..4eb1d4143f Binary files /dev/null and b/Docs/SimfileFormats/SDF/ssc-bg.png differ diff --git a/Docs/SimfileFormats/SDF/test-1bpm.sdf b/Docs/SimfileFormats/SDF/test-1bpm.sdf new file mode 100644 index 0000000000..73ac9972a8 Binary files /dev/null and b/Docs/SimfileFormats/SDF/test-1bpm.sdf differ diff --git a/Docs/SimfileFormats/SDF/test.sdf b/Docs/SimfileFormats/SDF/test.sdf new file mode 100644 index 0000000000..bd46af310f Binary files /dev/null and b/Docs/SimfileFormats/SDF/test.sdf differ diff --git a/Docs/SimfileFormats/SDF/test.sm b/Docs/SimfileFormats/SDF/test.sm new file mode 100644 index 0000000000..7288da7a16 --- /dev/null +++ b/Docs/SimfileFormats/SDF/test.sm @@ -0,0 +1,651 @@ +#TITLE:test song; +#SUBTITLE:a remix; +#ARTIST:kurt angle!; +#TITLETRANSLIT:{ignored by sm2sdf}; +#SUBTITLETRANSLIT:{ignored by sm2sdf}; +#ARTISTTRANSLIT:{ignored by sm2sdf}; +#GENRE:{ignored by sm2sdf}; +#CREDIT:aj jelly; +#BANNER:ssc-banner.png; +#BACKGROUND:ssc-bg.png; +#LYRICSPATH:{ignored by sm2sdf}; +#CDTITLE:{ignored by sm2sdf}; +#MUSIC:{ignored by sm2sdf}; +#OFFSET:-0.060; +#SAMPLESTART:{ignored by sm2sdf}; +#SAMPLELENGTH:{ignored by sm2sdf}; +#SELECTABLE:YES; +#BPMS:0.000=93.810,5.000=187.62; +#STOPS:; +#TIMESIGNATURES:{ignored by sm2sdf}; +#BGCHANGES:{ignored by sm2sdf}; +#KEYSOUNDS:{ignored by sm2sdf}; + +//---------------dance-single - ---------------- +#NOTES: + dance-single: + : + Beginner: + 1: + 0.035,0.034,0.000,0.000,0.000,5.000,0.000,0.000,0.000,0.000,0.000,0.035,0.034,0.000,0.000,0.000,5.000,0.000,0.000,0.000,0.000,0.000: +1000 +0000 +0000 +0000 +, +0000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +0000 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +, +0000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +; + +//---------------dance-single - Copied from---------------- +#NOTES: + dance-single: + Copied from: + Easy: + 2: + 0.063,0.039,0.000,0.000,0.000,9.000,0.000,0.000,0.000,0.000,0.000,0.063,0.039,0.000,0.000,0.000,9.000,0.000,0.000,0.000,0.000,0.000: +1000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +, +0001 +0000 +0000 +0000 +, +1000 +0000 +0000 +0000 +; + +//---------------dance-single - ---------------- +#NOTES: + dance-single: + : + Medium: + 4: + 0.119,0.078,0.000,0.000,0.000,17.000,0.000,0.000,0.000,0.000,0.000,0.119,0.078,0.000,0.000,0.000,17.000,0.000,0.000,0.000,0.000,0.000: +1000 +0000 +0010 +0000 +, +0100 +0000 +0001 +0000 +, +1000 +0000 +0100 +0000 +, +1000 +0000 +0001 +0000 +, +0100 +0000 +0010 +0000 +, +1000 +0000 +0001 +0000 +, +0010 +0000 +0001 +0000 +, +0100 +0000 +0001 +0000 +, +1000 +0000 +0000 +0000 +; + +//---------------dance-single - Copied from---------------- +#NOTES: + dance-single: + Copied from: + Hard: + 6: + 0.286,0.195,0.390,0.781,0.000,17.000,8.000,16.000,0.000,8.000,0.000,0.286,0.195,0.390,0.781,0.000,17.000,8.000,16.000,0.000,8.000,0.000: +1000 +0000 +2020 +0000 +, +3130 +0000 +0202 +0000 +, +1303 +0000 +0220 +0000 +, +1330 +0000 +0202 +0000 +, +1303 +0000 +2020 +0000 +, +3031 +0000 +0202 +0000 +, +0313 +0000 +2002 +0000 +, +3103 +0000 +0202 +0000 +, +1303 +0000 +0000 +0000 +; + +//---------------dance-single - ---------------- +#NOTES: + dance-single: + : + Challenge: + 10: + 0.425,0.293,0.195,0.000,0.390,57.000,4.000,0.000,0.000,0.000,0.000,0.425,0.293,0.195,0.000,0.390,57.000,4.000,0.000,0.000,0.000,0.000: + // measure 1 +1000 +0000 +0000 +0001 +0000 +0000 +1000 +0100 +0000 +0000 +1000 +0000 +0010 +0000 +0001 +0000 +, // measure 2 +0100 +0000 +0000 +0001 +0000 +0000 +1000 +0100 +0000 +0000 +0001 +0000 +0100 +0000 +0010 +0000 +, // measure 3 +1001 +0000 +0000 +1000 +0000 +0000 +0001 +0010 +0000 +0000 +0001 +0000 +0100 +0000 +1000 +0000 +, // measure 4 +0010 +0000 +0000 +1000 +0000 +0000 +0001 +0010 +0000 +0000 +1000 +0000 +0010 +0000 +0100 +0000 +, // measure 5 +1010 +0000 +0000 +0001 +0000 +0000 +1000 +0100 +0000 +0000 +1000 +0000 +0010 +0000 +0001 +0000 +, // measure 6 +0100 +0000 +0000 +0001 +0000 +0000 +1000 +0100 +0000 +0000 +0001 +0000 +0100 +0000 +0010 +0000 +, // measure 7 +1001 +0000 +0000 +1000 +0000 +0000 +0001 +0010 +0000 +0000 +0001 +0000 +0100 +0000 +1000 +0000 +, // measure 8 +0010 +0000 +0000 +1000 +0000 +0000 +0001 +0010 +0000 +0000 +1000 +0000 +0010 +0000 +0100 +0000 +, // measure 9 +1010 +0000 +0000 +0000 +; + +//---------------dance-single - ---------------- +#NOTES: + dance-single: + : + Edit: + 13: + 1.000,0.736,0.000,0.000,1.000,152.000,0.000,0.000,0.000,0.000,0.000,1.000,0.736,0.000,0.000,1.000,152.000,0.000,0.000,0.000,0.000,0.000: +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0100 +1000 +0001 +1000 +0100 +1000 +0000 +, +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0010 +0001 +1000 +0001 +0010 +0001 +0000 +, +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0100 +1000 +0001 +1000 +0100 +1000 +0000 +, +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0010 +0001 +1000 +0001 +0010 +0001 +0000 +, +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0100 +1000 +0001 +1000 +0100 +1000 +0000 +, +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0010 +0001 +1000 +0001 +0010 +0001 +0000 +, +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0000 +0100 +0000 +0010 +0000 +0001 +0000 +1000 +0100 +1000 +0001 +1000 +0100 +1000 +0000 +, +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0000 +0010 +0000 +0100 +0000 +1000 +0000 +0001 +0010 +0001 +1000 +0001 +0010 +0001 +0000 +; diff --git a/Docs/SimfileFormats/dance-spec.txt b/Docs/SimfileFormats/dance-spec.txt new file mode 100644 index 0000000000..a658d3947f --- /dev/null +++ b/Docs/SimfileFormats/dance-spec.txt @@ -0,0 +1,337 @@ +The "Dance" Format +------------------ +The goals of this format are easy parsability, easy human readability, +brevity, and disambiguity. + +Generic Information +------------------- +All strings are case-sensitive. Filenames are case-sensitive. The +directory separator is '/' regardless of the platform. All text +is encoded in UTF-8. Byte-order marking is not allowed. + +Enhanced Backus-Naur Form (ENBF) Specification +---------------------------------------------- +This is purely the grammar. A semantic explanation is below. + +Although this is given as a CFG specification, .dance is designed to be +parsed by a table-based DFA (as in pydance's fileparsers.py) + +Primitives: + ::= a sequence of characters + ::= 0.0 to Inf, decimal value + ::= 0 | -1 | -2 | -3 ... + ::= 0 | 1 | 2 | 3 ... + +Almost primitives: + ::= (" " | "\t")+ + ::= "\n" | "\r\n" | "\r" + ::= ( )* + ::= "end" + ::= | + ::= [("#" ) | ] + +Basic Structure: + ::= [+] + + +Metadata Storage: + ::= ( | )+ + ::= ( | | <Subtitle> | <Artist> | <Mix> | + <BPM> | <Offset> | <BG> | <Banner> | <Preview> | + <Checksum> | <StartAt> | <EndAt> | <Author> | <CDTitle> | + <RevisionDate> | <Valid> | <Movie>) <Newline> +<Filename> ::= "filename" <Whitespace> <LongString> +<Title> ::= "title" <Whitespace> <LongString> +<Subtitle> ::= "subtitle" <Whitespace> <LongString> +<Artist> ::= "artist" <Whitespace> <LongString> +<Mix> ::= "mix" <Whitespace> <LongString> +<BPM> ::= "bpm" <Whitespace> <Float> +<BPMDisplay> :: "bpmdisplay" ((<Whitespace> <Float>)+ | "*") +<Gap> ::= "gap" <Whitespace> <Int> +<StartAt> ::= "startat" <Whitespace> <Float> +<EndAt> ::= "endat" <Whitespace> <Float> +<BG> ::= "background" <Whitespace> <LongString> +<Banner> ::= "banner" <Whitespace> <LongString> +<Banner> ::= "cdtitle" <Whitespace> <LongString> +<Preview> :: "preview" <Whitespace> <Float> <Whitespace> <Float> +<Checksum> ::= "md5sum" <Whitespace> <String> +<Author> ::= "author" <Whitespace> <LongString> +<Movie> ::= "movie" <Whitespace> <LongString> +<RevisionDate> ::= "revision" <Whitespace> <LongString> +<Valid> ::= "valid" <Whitespace> 1 | 0 + +Text Sections: +<TextSection> ::= [<Description>] [<Lyrics>] +<Lyrics> ::= "LYRICS" <Newline> (<LyricLine>)+ <EndToken> +<LyricLine> ::= <Float> <Whitespace> <PosInt> <Whitespace> <LongString> <Newline> +<Description> ::= "DESCRIPTION" <Newline> (<LongString> <Newline>)+ <EndToken> + +Step Sections: +<StepSection> ::= <GameMode> <Difficulty> <Sequence>+ <EndToken> +<GameMode> ::= <String> <Newline> +<Difficulty> ::= <String> <Whitespace> <PosInt> <Newline> +<Sequence> ::= (<Comment> | <Buttons> | <Command>) <Newline> + +Note Sequences: +<Buttons> ::= <NoteType> (<Whitespace> <ButtonPresses>)+ +<NoteType> ::= "u" | "n" | "x" | "t" | "f" | "s" | "w" | "e" | "q" | "h" | "o" +<ButtonPresses> ::= (0 | 1 | 3 | 5 | 7)+ + +Song Commands: +<Command> ::= <ChangeBPM> | <Ready> | <Wait> | <Stop> | <Delay> | <Lyric> +<ChangeBPM> ::= "B" <Whitespace> <Float> +<Ready> ::= "R" +<Wait> ::= "W" <Whitespace> <Float> +<Stop> ::= "S" <Whitespace> <Float> +<Delay> ::= "D" <Whitespace> <Float> +<Lyric> ::= "L" <Whitespace> <Float> <Whitespace> <PosInt> <Whitespace> + <LongString> + +Informal & Semantic Description +------------------------------- +The dance format is basically the step format, but generalized, smaller, +and more readable. A script to convert .step files to .dance files is +forthcoming. + +A simple file might look like: + +filename asong.ogg +title A Song +subtitle Crazy Mix +artist Someone +# This is a comment +end +DESCRIPTION + This is an example song. + It's pretty uninteresting. +end +SINGLE +BASIC 0 +q 1010 +# This is another comment. +q 0101 +q 3030 +q 1010 +end + +Metadata Section: + +The metadata section of the song is the first section, and contains +important data about the file. An explanation of the keys follow: + +'filename': The filename of the audio file to play. + +'title': The name of the song. This should not include "Foo Mix". + +'subtitle': "Foo Mix", "Crazy Version", whatever. Default none. + +'artist': The name of the artist(s) and any remixers. + +'bpm': The beats per minute of the song. + +'gap': The millisecond offset into the song at which the arrows should + start. If the first beat is 0.3 seconds into the song, for example, + this should be -300. This can be negative. Default 0. + +'bpmdisplay': A whitespace-separated list of floats, which will be + cycled through on the song selector's BPM display. If + not present this defaults to the BPM if the song. If "*", + the BPM is displayed as constantly changing. + +'background': A background image (to display while the song is playing). + Default none. + +'banner': A banner for the song (to display in the song select). Default none. + +'cdtitle': A small (64x40) image to use as a CD title. Default none. This + path should either be relative to a special CD title directory, + or to the directory the file is in. + +'preview': An offset to seconds to start a song preview at, and a length to + play the preview. Default 45.0 and 10.0. + +'startat', 'endat': Start and end the music at these positions in seconds. + offset and the steps are then relative to the startat + position. Default 0.0 and the length of the song. + +'md5sum': If present, the MD5 checksum of the 'filename' file. If it's + present and the file doesn't match, a warning can be issued. + +'author': The person who wrote this file. Default none. + +'revision': The date of the last revision of this file, in YYYY.MM.DD format. + Defaults to "1970.01.01". + +'movie': The filename of a background movie; defaults to none. + +'valid': If not true, this song should be not selected using in random play + modes (e.g., it's not finished, hasn't been timed, etc). Default 1. + +The 'filename', 'title', 'artist', and 'bpm' keys are mandatory. + +Note that songs in this format will *NOT* have any files autodetected. If +you want them to be found, explicitly state them in the file. + +The metadata section, like all sections, must end with "end" on a line +by itself. + +Text Sections: + +There are two "text" sections in dance files; these are essentially +extended metadata sections. + +The DESCRIPTION section contains a description of the song. The format +roughly follows the DPKG description format: All lines of text start +with a space. Whitespace, including newlines, is ignored. A period ('.') +on a line by itself (with a space before it!) is to be interpreted as a +paragraph separator. An 'end' token on a single line, with no space before +it, ends the description. + +The LYRICS section contains lyric timing information. The format +of each line is, an integer, a float, and then a string. The integer +specifies the lyric "channel"; lyrics in the same channel should overwrite +each other, appear in the same place on the screen, etc. The float is the +time into the song during which the lyric should appear, irrespective +of the 'gap' value. + +Step Sections: + +The meat of the file is in the step sections, which actually describe +the game-related stuff. A step section is started as soon as an unknown +section token is encounter (i.e. currently not LYRICS or DESCRIPTION). +This first token is then taken as the "game mode". The two tokens on the +next line are the difficulty name and rating number. + +Then, until the "end" token, there are lines describing the steps. These +may be either a command, or a set of buttons to press. The "base" is 'q', +the quarter note, which represents one beat in the song. + +o Whole note (4 on-beat arrows) +h 1/2 note +q 1/4 note +e 1/8 note +w 1/12 note +s 1/16 note +f 1/24 note +t 1/32 note +u 1/48 note +x 1/64 note +n 1/192 note + +After the note comes a string of buttons. All these strings should be +the same length across game modes. Example strings might "1001" or "0030". + +0 No button at this time +1 A regular press at this time +3 This button must be pressed here and held down until a 1 is encounted +5 A secret step at this time. +7 A secret step and hold at this time. + +(Note - With bitwise &, + num & 1 => pressed here, + num & 2 => hold here, + num & 4 => this is a secret note. + +This correspondance is not necesarily guaranateed to be true for all +future additions to the .dance format, but will be maintained if possible.) + +Possible commands are: + +B <Float> Change the BPM of the song to this number at this point. +R "Ready? Go!" graphics/sound, if any. +W <Float> Wait this many seconds before the next event. +S <Float> Stop scrolling for this many seconds before the next event. +D <Float> The same as a sequence of 0 note strings for this many beats. +L <PosInt> <LongString> Display some lyrics at this point. + +Failing Gracefully +------------------ +Often, your parsers may come across tokens they don't know; maybe because +someone made an invalid file, or because the parser doesn't support all +of this format (or an old version of this format). If this is a section +token, this isn't a big problem; jump to the next end token and keep +going. Metadata tokens are equally easy to skip. + +Tokens in steps are more complicated. In general, you should treat +them as comments, treat unknown note types as 0s, and hope for the +best. + +Bad files shouldn't make your parser crash. It should return an error to +the program, which behaves accordingly. + +Future Extensions +----------------- +If this format is found to be inadaquate, the following extensions +may be added: + +New metadata keys. This would be a new line in the metadata section. +It is unlikely such a line would be mandatory, since current songs +work fine without them. + +New note types and commands. These would be new lowercase or uppercase +single characters in the song section. + +Standard Game Modes +------------------- +SINGLE - Normal single player with up, down, left, and right, or versus + mode, if no VERSUS is found. +VERSUS - Two players, both with the same steps. +COUPLE - Two players with different steps. +DOUBLE - Doubles, one player on both pads. + +5PANEL - Diagonal directions, and the center, for one player. +5VERSUS, 5COUPLE, 5DOUBLE - Similar to the 4 panel relationships. + +6PANEL, 6VERSUS, 6DOUBLE, 6COUPLE: Up left, up right, up, down, left, + and right. +8PANEL, etc: All directions except center. +9PANEL, etc: All directions including center. +3PANEL, etc: Up left, down, and up right. + +Changes: +-------- +2004.03.01 + - Version 1.2, released with pydance 1.0. + - Add 9 panel game mode. + +2004.01.16 + - Include comments in the example. + +2003.12.23 + - 3 panel modes. + - bpmdisplay metadata key. + +2003.12.22 + - 'cdtitle' metadata line. + +2003.08.15 + - Specify note types more exactly. + - Fix the broken DESCRIPTION in the example. + - Remove obsolete notes about the pydance implementation. + - Add more game modes to the list (especially of note is VERSUS). + +2003.07.30 + - Fix example of 'gap' attribute (-300 instead of 300). + - Fix nonsensical hold arrow example. + +2003.06.29 + - Fix a typo ("::" => "::="). + +2003.06.27 + - Add EBNF for COUPLE-style modes (spaces in Buttons) + +2003.06.26 + - Add a missing newline to LyricLine. + - Add (currently unexplained) BACKGROUNDS section. + +2003.06.03 + - Version 1.1 + - Add 192nd notes with 'n', 48th with 'u'. + +2003.06.01 + - Version 1.0 + - No more I command. + +2003.05.23: + - Started changes. + - v1.0 draft preparation. + - Need to explain the I command. diff --git a/Docs/SimfileFormats/misc.txt b/Docs/SimfileFormats/misc.txt new file mode 100644 index 0000000000..88088cf679 --- /dev/null +++ b/Docs/SimfileFormats/misc.txt @@ -0,0 +1,24 @@ +Miscellaneous Simfile Formats without directories +------------------------------------------------------------------------------- +[MSD] +Along with BMS, the grand daddy of simfile formats. +http://doremi.kalin.to/ddr/msd_format.html + +[PMS] +It's pretty much like BMS. If you really need documentation, +see src/NotesLoaderPMS.cpp I guess. I'm not going to make a folder for it when +it's a BMS derivative :x. + +[KMS] +Like BMS but for Keyboardmania? See http://wiki.bms.ms/KMS:Spec + +[GDA] +Like BMS but for Session (Guitar Freaks/drummania). See http://wiki.bms.ms/GDA:Spec + +[pydance] +They call it ".dance". I call it ARGH. See dance-spec.txt for the info. +src: http://kai.vm.bytemark.co.uk/svn/pydance/trunk/pydance/docs/dance-spec.txt + +[D2R, SLO] +Obscure old Japanese formats. +src: http://web.archive.org/web/20040205071612/http://paramax.hypermart.net/ \ No newline at end of file diff --git a/Docs/Stats.xml b/Docs/Stats.xml index d50b7418a2..58710348d6 100644 --- a/Docs/Stats.xml +++ b/Docs/Stats.xml @@ -1,5 +1,5 @@ -<html> -<body> -This is a dummy file, installed by the StepMania installer; it will be overwitten the first time machine stats are saved. -</body> -</html> +<html> +<body> +This is a dummy file, installed by the StepMania installer; it will be overwitten the first time machine stats are saved. +</body> +</html> diff --git a/Docs/TODO.eric b/Docs/TODO.eric deleted file mode 100644 index 78448ebec6..0000000000 --- a/Docs/TODO.eric +++ /dev/null @@ -1,23 +0,0 @@ -* Option - Exclude autogen - -* DWI Course Compatibility - - Shuffle - - Random Entry -Low Pri: -* Keypad mapping - Auto-advance -* PSX compatibility option. WHen enabled: - - up-right should be synonymous with start. - - other things that PSX DDR games do to be more pad-friendly - - - -? Option system reengineering - - dynamically create option menus based on categorized options. - - provide properties to options for later use in network SM - -? Input mapping reengineering - - Chording - -Niggling: - - VSync option mentions tearing. - - Ignore axes - add warning that having this on can cause input problems. diff --git a/Docs/TODO.ericg b/Docs/TODO.ericg deleted file mode 100644 index 768a2d5544..0000000000 --- a/Docs/TODO.ericg +++ /dev/null @@ -1,14 +0,0 @@ -*** *** -*** TODO file for Eric Gustafson *** -*** *** - -Docs ----------- -1. Fill in sections for already written manual parts -2. Fill in section for editor -3. Fill in section for compile/cvs instructions -4. Fill in section for smpackage - -SMConvert ----------- -1. EVERYTHING! \ No newline at end of file diff --git a/Docs/TODO.james b/Docs/TODO.james deleted file mode 100644 index 67520c8f0a..0000000000 --- a/Docs/TODO.james +++ /dev/null @@ -1,7 +0,0 @@ -Work on ez2 metrics -Work on para metrics - -Work on official Stepmania 5th mix theme -Improve Other Themes - -Maybe work on a course editor? \ No newline at end of file diff --git a/Docs/TODO.lance b/Docs/TODO.lance deleted file mode 100644 index 854077c092..0000000000 --- a/Docs/TODO.lance +++ /dev/null @@ -1,21 +0,0 @@ -//////////////////////////////////// -//Lance Gilbert's Todo/Done Record// -//////////////////////////////////// - -// Last Updated November 12th 2002 - -Todo List: - -1) Fix menus that go off the right hand side of the screen. - -STATUS: In Progress (As Of 11/12/02) - -2) Fix OpenGL/SDL based refresh rate changes. - -STATUS: In Progress (As Of 11/12/02) -Explination: Made some changes... but they didn't seem to work. - I'm still encountering the 80Hz bug. - -3) Fix Movie Loading Problems? (May be my machine, I'm looking into it) - -STATUS: Un-Resolved (As Of 11/12/02) diff --git a/Docs/TODO.mdenham b/Docs/TODO.mdenham deleted file mode 100644 index 9209599a31..0000000000 --- a/Docs/TODO.mdenham +++ /dev/null @@ -1,17 +0,0 @@ -TODO (last updated 11/12/03) -(Note 1: anyone who wants to dump stuff off on me, add it to the bottom of the list and put your initials at the beginning - I'll take a look at doing it) -(Note 2: if you've done something that's in my list, mark it off) - -(111203 ) Finish NOTE noteskin -(111203 ) Refix autogen from the *&@$ing idiocy in the rewrite -( ) Editor -> 3-place pause display -( ) Editor -> Editor.ini -( ) Course loader -> Allow random mods (mod name: RMODS :->) -( ) Courses -> Remove massive bug where arrows are rendered incorrectly and do not disappear -(111203 ) Music wheel -> why the hell is the autogen logo appearing in Pop N' Music on pnm-nine steps -(-------) --- anything below this line waits until release of 4.0 --- -( ) Song ID system -( ) ScreenInformation -( ) ScreenRecords -( ) Workout mode -( ) 4thCS Challenge mode \ No newline at end of file diff --git a/Docs/TODO.miryokuteki b/Docs/TODO.miryokuteki deleted file mode 100644 index d0a8a25b0e..0000000000 --- a/Docs/TODO.miryokuteki +++ /dev/null @@ -1,11 +0,0 @@ -//////////////////////////////////// -// Miryokuteki's Todo/Done Record // -//////////////////////////////////// - -// Last Updated July 7th, 2003 - -Todo List: - <cleared> - -Done as of 05/09/03: - <cleared> \ No newline at end of file diff --git a/Docs/TODO.rooth b/Docs/TODO.rooth deleted file mode 100644 index e5233f2553..0000000000 --- a/Docs/TODO.rooth +++ /dev/null @@ -1,32 +0,0 @@ -These are things I want to see get done, and may or may not get around to. - -BUGS: - * During-gameplay judgement display (perfect, great, etc.) isn't updating - correctly. The animations are correct, but it's not using the right - graphics, instead cycling seemingly randomly between Marvellous and - Perfect. - - * In the music select, the groove radar is stuck at max everything. - - * In jukebox mode, scores aren't reset between songs. This means the score - meter goes insanely high and eventually (if allowed to go on for long - enough) an assert fails due to an integer overflow. - - * Texture/etc loading can't handle redirects that start with the file name of - the file they refer to (e.g. "Foo Bar.redir" referring to "Foo"); it instead - just goes into an infinite loop repeatedly resolving to the redirect. - -Other: - * We need redirects for the note color NoteSkin elements, e.g. Tap Note 12th, - etc. I've added some to the common fallbacks, but dance could use some too. - - * Redesign ScreenSelectMusic to make the layout much much more freeform. We - could have all our music selection needs in one program just by setting up - banner and/or custom graphic as a WheelItem element and allowing more - customization of the wheel "path". That should be sufficient for everything - I can think of except for style changes in 2nd generation PiU song wheel. - - * Allow themes to specify left/right vs. up/down item selection controls on a - per-screen basis. The best way to do this would be to separate - MenuLeft / MenuRight from PrevItem / NextItem and mapping the latter two - appropriately inside ScreenSelect. diff --git a/Docs/TODO.sean b/Docs/TODO.sean deleted file mode 100644 index 45334d14a9..0000000000 --- a/Docs/TODO.sean +++ /dev/null @@ -1,4 +0,0 @@ -- Rewrite row timings to allow for separate judgments of notes in a row, thereby - allowing for BM/PNM-like row judgment and combo-counting. - -- Implement BMA inflating and simfile format specifications. diff --git a/Docs/TODO.tim b/Docs/TODO.tim deleted file mode 100644 index 1706933168..0000000000 --- a/Docs/TODO.tim +++ /dev/null @@ -1,17 +0,0 @@ ---------------------------------------------------------------------- - TODO for Tim Hentenaar - - * = todo - ^ = done ---------------------------------------------------------------------- - -As of: 2/18/2003 -* Add RageSoundDriver for Linux to the drivers list -* Make a makefile for Linux if there isn't one -* Do some testing... - -^ checked in RageSound Driver for Linux (ALSA) -^ modified arch.cpp & arch.h to include Linux Sound Driver - - - diff --git a/Docs/TODO.wolfman b/Docs/TODO.wolfman deleted file mode 100644 index 5b05edc189..0000000000 --- a/Docs/TODO.wolfman +++ /dev/null @@ -1,7 +0,0 @@ -1/25/06 - -Wow; over 2 years since I updated this... - -Goals: Find bugs, squash them, get VC2005 compiled. - -Pray for me. \ No newline at end of file diff --git a/Docs/TextEntry.txt b/Docs/TextEntry.txt new file mode 100644 index 0000000000..c5e975d583 --- /dev/null +++ b/Docs/TextEntry.txt @@ -0,0 +1,14 @@ +Code that uses ScreenTextEntry::TextEntry() +------------------------------------------- +RoomWheel.cpp +ScreenEdit.cpp +ScreenEditMenu.cpp +ScreenNetRoom.cpp +ScreenNetworkOptions.cpp +ScreenOptionsCourseOverview.cpp +ScreenOptionsManageCourses.cpp +ScreenOptionsManageEditSteps.cpp +ScreenOptionsManageProfiles.cpp +ScreenOptionsReviewWorkout.cpp +ScreenPackages.cpp +ScreenTestFonts.cpp \ No newline at end of file diff --git a/Docs/Themerdocs/Noteskin elements Reference.txt b/Docs/Themerdocs/Noteskin elements Reference.txt new file mode 100644 index 0000000000..2a80617d5b --- /dev/null +++ b/Docs/Themerdocs/Noteskin elements Reference.txt @@ -0,0 +1,91 @@ +Noteskin elements Reference: +{ Taps } +button Tap Note +button Tap Mine +button Tap Lift +button Tap Fake + +{ holds } +--active-- +button Hold Head Active +button Hold Topcap Active +button Hold Body Active +button Hold Bottomcap Active +button Hold Tail Active + +--inactive-- +button Hold Head Inactive +button Hold Topcap Inactive +button Hold Body Inactive +button Hold Bottomcap Inactive +button Hold Tail Inactive + +{ rolls } +--active-- +button Roll Head Active +button Roll Topcap Active +button Roll Body Active +button Roll Bottomcap Active +button Roll Tail Active + +--inactive-- +button Roll Head Inactive +button Roll Topcap Inactive +button Roll Body Inactive +button Roll Bottomcap Inactive +button Roll Tail Inactive + +{ button } +--dance-- +Left +Right +Up +Down +UpLeft +UpRight + +--pump-- +UpLeft +UpRight +Center +DownLeft +DownRight + +--ez2-- +FootUpLeft +FootUpRight +FootDown +HandUpLeft +HandUpRight +HandLrLeft +HandLrRight + +--para-- +Left +UpLeft +Up +UpRigh +Right + +--ds3ddx-- + + +--beat-- +Key1 +Key2 +Key3 +Key4 +Key5 +Key6 +Key7 +Scratch up +Scratch down + +--maniax-- + + +--techno-- + +--popn-- + +--lights (rofl)-- \ No newline at end of file diff --git a/Docs/Themerdocs/fontini.txt b/Docs/Themerdocs/fontini.txt new file mode 100644 index 0000000000..09a9564673 --- /dev/null +++ b/Docs/Themerdocs/fontini.txt @@ -0,0 +1,26 @@ +SM4 Font .ini values + +[common] +CapitalsOnly +RightToLeft +DefaultStrokeColor + +[main] +import + +(per-page) +DrawExtraPixelsLeft +DrawExtraPixelsRight +AddToAllWidths +ScaleAllWidthsBy +LineSpacing +Top +Baseline +DefaultWidth +AdvanceExtraPixels +TextureHints + +(general commands) +MAP +RANGE +LINE diff --git a/Docs/Themerdocs/included_scripts.txt b/Docs/Themerdocs/included_scripts.txt new file mode 100644 index 0000000000..f3566ecd0a --- /dev/null +++ b/Docs/Themerdocs/included_scripts.txt @@ -0,0 +1,125 @@ +Scripts included with sm-ssc's fallback theme +--------------------------------------------- +As a StepMania fork focused on themers, sm-ssc is going to be a bit different +than a normal StepMania 4 setup. The fallback theme includes a number of scripts +you won't find in the SM4 default theme. This file is meant to be an overview of +what happens in the scripts; it does not go in depth with any of them. Please +see the documentation included in the scripts as comments, as well as any text +files for the more sufficiently advanced scripts. + +==00 init.lua== (StepMania 4) +Always executed first, this file does the following: +* replaces Lua's Uppercase function with StepMania's (which is always UTF8) +* alias Trace, Warn, and print +* creates convienence aliases PLAYER_1, PLAYER_2, and NUM_PLAYERS +* creates find_last(text) function for strings. + +==01 alias.lua== (sm-ssc) +This file is used to create aliases for functions. Usually, it's used for making +case-sensitive commands case-insensitive without having to make source code +edits to accomplish the same thing. + +==01 base.lua== (StepMania 4) +* overrides loadfile to use StepMania's. +* overrides dofile to use SM's loadfile. +* creates a function ivalues(t), which is like pairs but returns only values. + +==01 compat.lua== (sm-ssc) +sm-ssc compatibility helpers. Since sm-ssc renames and deprecates some features, +this file is used to help ease the transition of themes that still use the old +commands. + +==02 CustomSpeedMods.lua== (sm-ssc) +This version of AJ Kelly's CustomSpeedMods is for sm-ssc, since it allows for +reading in of both player and machine slots, as well as merging of the speed +mods of all three (if applicable). By including this in _fallback, every sm-ssc +theme has access to custom speed mods from the start. + +To use CustomSpeedMods in your theme, find [ScreenPlayerOptions] in the metrics, +find "list,Speed" and replace it with "lua,SpeedMods()". + +==02 EnvUtils2.lua== (sm-ssc) +EnvUtils2 provides the getenv(name) and setenv(name,value) commands. + +==02 HSV.lua== (sm-ssc) +[to be written] + +==02 ProductivityHelpers.lua== (sm-ssc) +This file is the sm-ssc edition of ProductivityHelpers. It shouldn't be used +with any newly created regular SM4 themes, just sm-ssc ones. +* provides the Blend alias, allowing for commands like blend,Blend.Add; etc. +* provides the Health alias, which provides a mapping to various HealthState + enums. +* CenterX, CenterY, xy (set both the x and y coords in one command) +* MaskSource and MaskDest commands for easier masking. +Various others are included, see the file for more information. + +==02 UserPreferences2.lua== (sm-ssc) +[to be written] + +==03 FileUtils.lua== (sm-ssc) +FileUtils is used to read and write files with minimal effort. + +* File.Read(path) reads in the file at path. +* File.Write(path,buf) writes the contents of buf to the file at path. + +If either of the two error out/don't work, check the log for the reason why. + +==03 WidescreenHelpers.lua== (sm-ssc) +[to be written] + +==Actor.lua== (StepMania 4) +[to be written] + +==ActorDef.lua== (StepMania 4) +[to be written] + +==Branches.lua== (sm-ssc) +sm-ssc's branch system is slightly different than the one in StepMania 4. +Instead of having multiple functions, all the branches are contained within a +single table, Branch. All the branches are members of this table, so you'll see +things like +NextScreen=Branch.PlayerOptions() +in the theme. + +==Colors.lua== (StepMania 4) +[to be written] + +==DateTime.lua== (sm-ssc) +freem, inc.'s DateTime class only exists to provide two commands at the moment: +* Date.Today() - returns today's date as YYYYMMDD. +* Time.Now() - returns the current time in 24 hour format as HH:MM:SS. +Eventually, this class may grow bigger. + +==Debug.lua== (StepMania 4) +[to be written] + +==Enum.lua== (StepMania 4) +[to be written] + +==HelpDisplay.lua== (StepMania 4) +[to be written] + +==Lyrics.lua== (StepMania 4) +[to be written] + +==OptionsMenu.lua== (StepMania 4) +[to be written] + +==Other.lua== (StepMania 4) +[to be written] + +==Serialize.lua== (StepMania 4) +[to be written] + +==Sound.lua== (StepMania 4) +[to be written] + +==Sprite.lua== (StepMania 4) +[to be written] + +==StageMods.lua== (StepMania 4) +[to be written] + +==Utilities.lua== (StepMania 4) +[to be written] \ No newline at end of file diff --git a/Docs/Themerdocs/recommended_practices.txt b/Docs/Themerdocs/recommended_practices.txt new file mode 100644 index 0000000000..b67083f836 --- /dev/null +++ b/Docs/Themerdocs/recommended_practices.txt @@ -0,0 +1,7 @@ +Recommended Practices when theming for sm-ssc +--------------------------------------------- +1) Use the --theme= command line parameter to switch between themes quickly. +This way, you don't have to deal with the theme switch and all the possible +nonsense errors that might come up (due to you having a different amount of +song group colors, timer warning states, etc.), and you can quickly switch +themes if you work on many of them at once. \ No newline at end of file diff --git a/Docs/Themerdocs/sm-ssc_themeguide.txt b/Docs/Themerdocs/sm-ssc_themeguide.txt new file mode 100644 index 0000000000..44082cc0a3 --- /dev/null +++ b/Docs/Themerdocs/sm-ssc_themeguide.txt @@ -0,0 +1,127 @@ +How to Theme for sm-ssc: THE DOC. +________________________________________________________________________________ +Table of Contents +i. Introduction +ii. Requirements +---------------- +1. Introduction to Concepts + 1. The Raw Elements + 1. Metrics + 2. BGAnimations + 3. Graphics + 4. Fonts + 5. Sounds + 6. Languages + 7. Scripts + 8. Other + 2. Screens, Classes, Managers and more +2. Elements in Detail + 1. Metrics and Languages + 2. BGAnimations + 3. Graphics + 4. Fonts, Sound + 5. Scripts +X. Making Your First sm-ssc Theme + 1. Setup + 2. +________________________________________________________________________________ + i. Introduction +________________________________________________________________________________ +ii. Requirements +In order to follow along with this guide, you will need the following: + +* sm-ssc (our fork of StepMania 4) + Right now, it's in private beta. If you have it, you're lucky. +* A decent text editor (syntax highlighting is a plus) +* A decent graphics editor (for any graphics changes you want to make) +* A decent sound editor (in case you want to edit sounds) + +Some of these may not apply to you (e.g. you may just want to learn how to +do BGAnimations in Lua and what the differences in the metrics are). +That's fine. :) + +Other recommended utilities will be introduced throughout this guide; they are +not required if you do not wish to use them. +________________________________________________________________________________ +1. Introduction to Concepts +If you are familiar with theming for another version of StepMania already, you +can skim this section to see what differences exist between that version and +sm-ssc. +-------------------------------------------------------------------------------- +1.1 The Raw Elements +A StepMania theme is comprised of multiple parts. Some of these parts are more +important than others. This section briefly introduces each of the elements, +explaining what they do and why they're important. +More in-depth descriptions will come with each chapter. + +1.1.1 Metrics +The metrics (metrics.ini) contain the core elements of a theme. Most everything +that has to do with StepMania's built-in types will be found here. + +1.1.2 BGAnimations +BGAnimations are used to decorate screens. In SM4, they use Lua for BGAnims, +which allows for some amazing stuff if done right. This guide won't delve too +deeply into abusing BGAnimations for fun and profit (via custom coded elements), +but it will be brought up later. + +1.1.3 Graphics +Graphics are simply that. They go along with the metrics, but can also be +called from BGAnimations. Some graphics can be replaced with Lua files for more +complex creations. + +1.1.4 Fonts +Fonts are used to draw text to the Screen. They can consist of a normal page +and a stroke page, as well as the special numbers and alternate characters +pages. + +One of the problems with SM Fonts is that they require a program to generate the +required format. Both known programs are Windows-only, hindering those +developing StepMania themes on Mac and Linux (unless some sort of virtualization +solution is used). +When you make a non-text font, you only have the choice of an image editor. +Hope it has a customizable grid! (This is where Paint Shop Pro 7 beats any +version of Photoshop.) + +1.1.5 Sounds +The Sounds folder contains both sounds that play during the use of StepMania, +as well as any music your theme contains. + +1.1.6 Languages +Languages are where Strings that appear in the theme should be defined. Each +language is represented by a two letter code, with the following examples from +the default theme: +en - English +es - Spanish (Espanol) +fr - French (Francais) +it - Italian(o) +de - German (Deutsch) + +1.1.7 Scripts +Lua Scripts were introduced in StepMania 4 (really "3.95", if you want to get +technical). If you've come from theming an earlier version where they didn't +exist (3.9), this folder might take some getting used to. This directory holds +Lua scripts that are loaded on startup. Some scripts lay down the theming +foundation, meaning that if you're crazy enough, you can rewrite everything. +If you do that though, this guide will start to make a lot less sense. + +1.1.8 Other +The Other folder contains miscellaneous things. You generally won't need to +worry about this folder unless you need to edit some uncommon files. +________________________________________________________________________________ +2. Elements in Detail +Unless you are a very fast learner and can learn by looking at other people's +code, you are probably wanting to know more about the elements in detail. + +2.1 Metrics and Languages +These two are grouped together since they both use ini files. This means the +layout of the file will contain groups, keys, and values. + +[Group] +Key=Value +{ caption: Example of various .ini elements } + +In StepMania, most groups are Screens. + +The Languages folder contains strings that StepMania displays when your theme +is used. Chances are, if you want to edit the text of something, there's an +entry for it in one of the Language files (en.ini, usually). \ No newline at end of file diff --git a/Docs/Userdocs/sm-ssc_beginner.txt b/Docs/Userdocs/sm-ssc_beginner.txt new file mode 100644 index 0000000000..874a9fa43f --- /dev/null +++ b/Docs/Userdocs/sm-ssc_beginner.txt @@ -0,0 +1,341 @@ +sm-ssc Beginner's Guide +Written and edited by the spinal shark collective +-------------------------------------------------------------------------------- +Table of Contents +1 Introduction +2 StepMania + 2.1. Terms and Concepts + 2.1.1 Notable StepMania Versions + 2.1.2 StepMania Components + 2.2 StepMania Configuration + 2.2.1 Frequently Asked Questions that can be + Solved by Changing the Configuration + 2.3. Installing Content + 2.3.1 Installing Song Files + 2.3.2 Installing Noteskins/New Gametypes + 2.3.3 Installing Themes +3. sm-ssc +================================================================================ +Chapter 1: Introduction +================================================================================ +Welcome to the sm-ssc Beginner's Guide. This guide is primarily meant for people +who do not have any previous experience with StepMania, but also includes +information on how sm-ssc differs from StepMania. If you already know what +StepMania is, and the basics of adding things to an install, you can skip ahead +to Chapter 3: sm-ssc. Otherwise, read on. + +================================================================================ +Chapter 2: StepMania +================================================================================ +StepMania is an open-source rhythm game/engine, used by many projects, both +commercial and free. It is the software from which sm-ssc is derived, and as +a result, must be learned before using sm-ssc if you're not already familiar +with how it works. + +Some of the things an average sm-ssc user is expected to know includes the +meanings/"proper names" of certain things, as well as how to install content +and configure the program to suit your playing style. + +-------------------------------------------------------------------------------- +2.1: Terms and Concepts +-------------------------------------------------------------------------------- +Like many other video games, StepMania has a rich lexicon of words which may +confuse others. The most important of the terms has to do with versions of +StepMania, as backwards compatibility is pretty much nonexistent between major +versions. + +-------------------------------------------------------------------------------- +2.1.1: Notable StepMania Versions +-------------------------------------------------------------------------------- +Knowing the versions of StepMania is helpful, as it will help you deduce what +you can and can not install. (Most songs are version-agnostic, though the +background animations may not be. Themes, Noteskins, etc. are tied to +specific versions.) + +* StepMania 3.9 +StepMania 3.9 is currently considered the stable version of StepMania. It dates +back to 2005, and is the version for which the bulk of content is produced. + +* StepMania 3.9 Plus/StepMania 3.9 Plus Redux +3.9 Plus/Redux is a fork of StepMania 3.9 that adds features from +later StepMania versions (such as rolls), as well as new features. + +* StepMania 3.95/StepMania Online +Generally, when people talk about this version, they refer to a CVS build of +StepMania from around June-August 2006. It was not an officially supported +build of StepMania. + +* OpenITG +OpenITG is a fork of the StepMania CVS code from around the time In The Groove 2 +was released. OpenITG's goal is to produce a replacement executable for ITG2 +machines with enhanced features, though it can also be used at home as well. + +* StepMania 4.0 CVS +This term is used to describe versions of StepMania 4 that appeared after "3.95" +up until January 2008, when the last build that could be categorized as "CVS" +was released. + +* StepMania 4.0 SVN/alpha +The current development version of StepMania. This is the version that sm-ssc +is forked off of. If you wish to port something to sm-ssc, it had better work +for this version first, unless you like working hard to port the theme past +various generations and default theme assumptions. + +-------------------------------------------------------------------------------- +2.1.2: StepMania Components +-------------------------------------------------------------------------------- +Despite the title, this is a bit more broader-reaching, as it covers terms that +you may see in StepMania communities and online. +-------------------------------------------------------------------------------- +* Courses + Courses exist in many different forms, but in general, they take you through + multiple songs without a break in-between. There are multiple types of courses: + + * Nonstop Courses + Nonstop courses use the regular lifebar and typically have 4 songs per + course, though this isn't always the case. It is the easiest of the + course modes. + + * Oni/Challenge Courses + The Oni/challenge courses are quite difficult, usually giving you 4 lives + over multiple songs. If you get less than a Great, you lose a life. Once + you lose all your lives, the game is over. + + * Survival Courses + Survival courses go by time. Each step judgment is worth something on the + timer, with most of the values being negative by default. If you run out of + time before you complete the course, the game is over. + + * Endless Courses + Endless courses are like the name suggests. They don't end until you fail or + decide to quit. Like Nonstop courses, they have a normal lifebar as well. +-------------------------------------------------------------------------------- +* Event Mode + Typically used during events, this disables the concept of stages and lets you + play songs until you decide to stop. It is quite useful in Home Mode, and this + guide recommends you enable it. + +* Gametypes + Gametypes are the different game modes StepMania can play. They generally + change things like number of default receptors, number of judgments, and more. + Gametypes are directly related to noteskins and unrelated to the different + play modes (Normal, Nonstop, Challenge, and so on). + Examples of gametypes include "dance", "pump", "beat", "techno", and so on. + +* NoteSkins + NoteSkins are the appearance of the notes. Most noteskins are bound to certain + gametypes, though some noteskins are easily adapted for other gametypes. + +* Pack/packs + A pack is a group of songs for StepMania. The term originated from the + community of StepMania keyboard creators, and can be seen prominently in + certain release names, such as Community Keyboard Mega Pack (CKMP). + When used as a single word question, e.g. "packs?", it is a request for what + packs you have installed. + +* Songs + StepMania songs contain a few files, but mainly the steps (.sm, .dwi, .ksf, + .bms, among many other formats) and song file itself (.mp3, .ogg, .wav). In + order to get the most out of StepMania, you'll need to know all about songs + and how to install them. + +* Themes + Themes are skins for StepMania. They change the look and feel, and in post-3.9 + versions, can also change elements of gameplay (scoring, grading) as well. + +-------------------------------------------------------------------------------- +2.2: StepMania Configuration +or "How to use the Options Menu" +-------------------------------------------------------------------------------- +Learning how to properly configure StepMania can save you headaches. + +Most themes will have the Options menu in plain sight on the Title Menu. +From there, it depends on which version of StepMania you have, as the options +menus were re-shuffled around for the StepMania 4 alphas. + +The typical StepMania 3.9 Options Menu: +* Appearance Options +* Background Options +* Bookkeeping +* Center Image +* Coin Options +* Config Key/Joy Mappings +* Input Options +* Gameplay Options +* Graphic Options +* Machine Options +* Sound Options +* Profile Options +* Other Options +* Reload Songs/Courses +* Test Input + +The StepMania 4.0 alpha 4 Options Menu: +* Config Key/Joy Mappings +* Test Input +* Appearance Options +* Graphics/Sound Options +* Advanced Options +* Network Options +* Profiles +* Reload Songs/Courses + +-------------------------------------------------------------------------------- +2.2.1: Frequently Asked Questions that can be Solved by Changing the Configuration +-------------------------------------------------------------------------------- +With that in mind, it's time to answer some questions using this knowledge. + +Q: How do I disable the menu timer? +A: Where you go depends on the version of StepMania you use. + +[3.9] Machine Options +[4.0 alphas] Advanced Options +It will be the first option on each. + +Q: How do I play forever, without game overs? +A: Turn on Event Mode. Where you go depends on the version of StepMania you use. + +[3.9] Coin Options +[4.0 alphas] Advanced Options, a bit down the page. + +Q: What the heck is this thing that says "Toasty" and how do I get rid of it? +A: It's a reference to Mortal Kombat 2, where Dan Forden would pop out from +the side of the screen randomly after an uppercut. +In order to get a Toasty in StepMania, one must get a 250 combo without any +Greats. The number 250 is a reference to how many VS games of MK2 you had to +play before you could play Pong. + +As for turning it off, turn Easter Eggs off. +It appears in different locations between StepMania versions: +[3.9] Gameplay Options +[4.0 alphas] Advanced Options, a bit down the page. + +-------------------------------------------------------------------------------- +2.3: Installing Content +-------------------------------------------------------------------------------- +This is the most important section you will read, as all the time that you spend +not playing with StepMania will be adding/removing things to it. Well, not +completely, as you have other things to do. + +Before we touch on the specifics, there are a few skills you should learn. + +* Mac Users of StepMania 4.0 +Most of the game content is packaged in a file called StepMania.smzip. This has +the pros of not cluttering things up, but the con is that people don't know +where to put things. + +Wherever you have StepMania installed, make the following folders: + * Songs + * Themes + * Noteskins + (and the various gametype folders, which are optional. You need at least one + non-lights gametype in order to play.) + * Noteskins/dance + * Noteskins/pump + * Noteskins/para + * Noteskins/techno + * Noteskins/beat + * Noteskins/popn + * Noteskins/ez2 + * Announcers + (but at this point, no SM4 announcers have been released) + * Packages + (optional, but recommended) + +and then you can follow the rest of this guide. + +* Not on Windows and want to deal with .smzip files? +There are multiple ways to deal this. + 1) Put the SMZip file in the Packages folder. + 2) Rename the file to have an extension of .zip and extract in the root + StepMania folder. + 3) Pass the smzip's filename to StepMania on the command line/terminal. + Dragging and dropping the .smzip may or may not work; we have not tested it. + Also, this may or may not exist in your version of StepMania. + +-------------------------------------------------------------------------------- +2.3.1: Installing Song Files +-------------------------------------------------------------------------------- +Song files are distributed in many ways. The concept of packs was explained +above, in which multiple songs are included in one archive. + +For .smzip files, the section "Not on Windows and want to deal with .smzip +files?" details all possible ways of installing .smzip files, but the most +common ways are as follows: + +1) For operating systems with a filetype handler (Windows), you can double + click on the .smzip file and the StepMania tools will handle it. +2) Putting the .smzip file in the Packages folder, where it will be automatically + read by StepMania. + +If it's not a .smzip file, you'll have to do some detective work. +Open up the song archive and see how the files are laid out. + +The easiest single song installs will have a folder structure similar to this: +Group Name\ + Song Name\ + song file.sm + song file.ogg/mp3 + song file-bg.png + song file-bn.png + +With a setup like this, you can just extract it to the Songs folder with +directory structure intact. + +Sometimes, simfile authors don't package their file with a group name, +leaving you with a file structure like this: +Song Name\ + song file.sm + song file.ogg/mp3 + song file-bg.png + song file-bn.png + +You will need to extract this into a song group folder that exists already. + +An uncommon setup will only include the song files, without any folders at all. +These need to be put into the {Group Name}\{Song Name}\ folder in order to work. + +For packs, you follow the same logic. If there are multiple song folders, but no +group folder, you will have to make a group folder. (Flightmix 4 is an example +of a pack that exhibits this behavior.) + +Overall, the setup should look something like this: + +StepMania\ + Songs\ + Song Group 1\ + Song Group 2\ + Song Group 3\ + Song Group 4\ + Example Song\ + Example Song.sm + Example Song.mp3/ogg + Example Song-bn.png + Example Song-bg.png + +-------------------------------------------------------------------------------- +2.3.2: Installing Noteskins/New Gametypes +-------------------------------------------------------------------------------- + +StepMania\ + NoteSkins\ + (gametype)\ + (noteskin for gametype)\ + default\ + (gametype2)\ + default\ + +-------------------------------------------------------------------------------- +2.3.3: Installing Themes +-------------------------------------------------------------------------------- + + +When in doubt, read any documentation that comes with the theme for proper +installation instructions. + +================================================================================ +Chapter 3: sm-ssc +================================================================================ +sm-ssc is a fork of the current StepMania codebase. It is focused on adding +features for theming, but also tries to make the process of dealing with +StepMania a little easier. \ No newline at end of file diff --git a/Docs/alternate_pump_doubles_spacing.txt b/Docs/alternate_pump_doubles_spacing.txt new file mode 100644 index 0000000000..a7eb8e2799 --- /dev/null +++ b/Docs/alternate_pump_doubles_spacing.txt @@ -0,0 +1,13 @@ +pump doubles "proper" spacing (sides separate) + +static const int PUMP_COL_SPACING = 48; +{ TRACK_1, -PUMP_COL_SPACING*4.58f, NULL }, +{ TRACK_2, -PUMP_COL_SPACING*3.58f, NULL }, +{ TRACK_3, -PUMP_COL_SPACING*2.58f, NULL }, +{ TRACK_4, -PUMP_COL_SPACING*1.58f, NULL }, +{ TRACK_5, -PUMP_COL_SPACING*0.58f, NULL }, +{ TRACK_6, +PUMP_COL_SPACING*0.58f, NULL }, +{ TRACK_7, +PUMP_COL_SPACING*1.58f, NULL }, +{ TRACK_8, +PUMP_COL_SPACING*2.58f, NULL }, +{ TRACK_9, +PUMP_COL_SPACING*3.58f, NULL }, +{ TRACK_10, +PUMP_COL_SPACING*4.58f, NULL }, \ No newline at end of file diff --git a/Docs/closed.gif b/Docs/closed.gif deleted file mode 100644 index e71bc67fab..0000000000 Binary files a/Docs/closed.gif and /dev/null differ diff --git a/Docs/credits.txt b/Docs/credits.txt new file mode 100644 index 0000000000..cef90c8491 --- /dev/null +++ b/Docs/credits.txt @@ -0,0 +1,92 @@ +sm-ssc credits (in no particular order) +--------------------------------------- +This list is currently incomplete. +"Programming" is used in regards to the sm-ssc project. + +==the spinal shark collective== +AJ Kelly + * Main programming + * UserPreferences and some other scripts + * small theme edits here and there + +Midiman + * Did most of the work on _fallback and default themes + * Some programming + +shakesoda + * Programming + * Theme edits + +==other contributors== +StepMania Team + * Keeping StepMania 4 alive with changes, and providing a nice codebase for + us to work with. + +Aldo_MX + * Code (Pump it Up delays), ideas, and support. + +Jason Reid (jnr) + * Tested building sm-ssc on FreeBSD, provided fixes. + +Daisuke Master + * Pump/default, Pump/flat, and Pump/simple noteskins + * /Docs/Themerdocs/Noteskin elements Reference.txt + * Taking advantage of sm-ssc's new features already :) + +Shayde Zehetbauer/Koizumi + * Menu music! + +David Santamara Rogado (howl) + * Various patches (see Changelog_sm-ssc.txt for more details and links) + +Macgravel + * Orbular noteskin (the kb7 noteskin; not included in private beta wave 1.3) + +theDtTvB + * Keysound patch (http://share11.appspot.com/20421) + [This patch is currently causing crashes for us, sadly.] + +sy567 + * Small beginner helper fix + (http://www.stepmania.com/forums/showpost.php?p=158721&postcount=12) + +galopin + * Pump it Up Exceed PlayStation 2 USB dance mat support patch + (stepmania-devs mailing list 20091213 11:27 -0800 [Pacific Standard Time]) + +FSX + * [Player] ScoreMissedHoldsAndRolls metric + +==the beta testers== +[SSC Beta Testing Team] +KeithD +tweak62 + +[Friends of the Devs] +And4713 +HankPeters +jnr +kdaymea +taiyal + +[Members of Team Step Masters (http://www.team-stepmasters.com/foro/)] +Daisuke Master +Nueel/emmanuel virus +Fye +Bijou +Nek0 +Jib +Robe +Urqui +h4m573r +Torta + +[Private Beta Wave 1.x] +FSX +Sniper257 +Wolfman2000 +NitroX72 +Wanny +Tio +Cerbo +Daisuke Master \ No newline at end of file diff --git a/Docs/default theme flowchart.txt b/Docs/default theme flowchart.txt new file mode 100644 index 0000000000..422ecb35f8 --- /dev/null +++ b/Docs/default theme flowchart.txt @@ -0,0 +1,40 @@ +sm-ssc default theme text-based flowchart + +start + | + V +first run? + +first run = yes: Setup Sequence + +first run = no: go to Title Menu +================================================================================ +[Setup Sequence] {sequence} +1) Appearance +2) Gameplay (timing, etc.) +3) Extra (theme appearance edit, etc.) +4) Confirmation/Cancel + +"These settings are fine": go to Title Menu +"I don't like it, do it again": return to Setup Sequence #1 +================================================================================ +[Title Menu] {choices} ("Game" on original flowchart) +1) Start Game +2) Options +3) Edit/Share +4) Exit +================================================================================ +[Start Game] {sequence} +1) Load Profiles +2) [optional] ScreenCaution +3) ScreenSelectStyle +4) ScreenSelectPlayMode +5) SelMusic/Course +6) [optional] Player, Song Options +7) ScreenStage +8) Gameplay +9) Eval +10) Save profile + +if not game over (e.g. not on last stage, event mode enabled, etc.) +go to 5, otherwise... \ No newline at end of file diff --git a/Docs/docpack.zip b/Docs/docpack.zip new file mode 100644 index 0000000000..6fe5963317 Binary files /dev/null and b/Docs/docpack.zip differ diff --git a/Docs/ezsockets.txt b/Docs/ezsockets.txt new file mode 100644 index 0000000000..c64c15dbec --- /dev/null +++ b/Docs/ezsockets.txt @@ -0,0 +1,132 @@ +HOW 2 UZE EZSOKETS BY FWEEM INC + +Hey there. ezsockets is the socket library used in StepMania. If you are going to +develop any extended network functionality, it would be good to know about +ezsockets. This is by no means an exhaustive guide, as it just covers what's +contained in the header, as well as what that code does. + +Section 1: low level commands=================================================== +These are typically used for connecting to the server, according to a cursory +glance at ScreenPackages code. + +=="Crating" a socket== (lol typos in the comments) +There are three functions here, each with different arguments (yay overloading). +All of them return a bool. + +bool create(int Protocol, int Type); +This shows what's needed to make a socket. Consult the internet for complete +documentation as to possible values, but here are some ones to know: + +[Protocol] +TCP = IPPROTO_TCP +UDP = IPPROTO_UDP +Raw sockets = IPPROTO_RAW (though "Protocol" is used in the code. Raw sockets +are not supported on Xbox) + +bool create(); +Creates a socket using (IPPROTO_TCP, SOCK_STREAM) as the parameters. + +bool create(int Protocol); +This picks the right Type for you based on what Protocol you choose. +TCP uses SOCK_STREAM, UDP uses SOCK_DGRAM for the Type value. + +==Binding Sockets to a Local Port== +bool bind(unsigned short port); + +==Listening== +bool listen() + +==Accepting== +bool accept(EzSockets &socket); +If it's not blocking and you can't read it, this will return false. +Other than that... ?? + +==Connecting to Server== +bool connect(const string& host, unsigned short port); +Connects to the server at host using port. + +==Closing/Killing Sockets== +void close(); +Sets the state to disconnected, sets the buffers to empty strings, +then closes the socket. + +==Checking Socket Status== +bool check(); +"see if socket has been created". It checks (sock != INVALID_SOCKET) on the +Xbox and (sock > SOCKET_NONE) on every other platform. + +bool CanRead(); +Returns true if you can read from the socket. + +bool DataAvailable() { return ( ( inBuffer.length()>0 ) || CanRead() ); } +Yeah that's it in a nutshell. If the input buffer has data or you can read, +there's data available. + +bool IsError(); +Returns true if there's an error. + +bool CanWrite(); +Returns true if you can write to the socket. + +==???== +long uAddr(); +void update(); + +Section 2: Higher Level Commands================================================ +These are higher level, since they assume you've already gotten the socket up +and running (see check() in Section 1). + +//Raw data system +void SendData(const string& outData); +void SendData(const char *data, unsigned int bytes); +Send off some data that's either a string or a char buffer + num bytes. + +int ReadData(char *data, unsigned int bytes); +Reads data, returns number of bytes read. + +int PeekData(char *data, unsigned int bytes); +Peeks at the data, returns number of bytes read. + +//Packet system (for structures and classes) +void SendPack(const char *data, unsigned int bytes); +int ReadPack(char *data, unsigned int max); +int PeekPack(char *data, unsigned int max); +Similar to the raw data system above, but... you guessed it, for structures and classes. + +//String (Flash) system / Null-terminated strings +void SendStr(const string& data, char delim = '\0'); +int ReadStr(string& data, char delim = '\0'); +int PeekStr(string& data, char delim = '\0'); +Similar to above, with null terminated strings. + +Section 3: putting it all together============================================== +okay i didn't test this; this is based on ScreenPackages code (specifically +ScreenPackages::EnterURL()), which assumes you have a private EzSockets object +named m_wSocket. + +{ + // defaults + RString sProto; + RString sServer; + int iPort=80; + RString sAddress; + + m_wSocket.create(); // will create a TCP socket + m_wSocket.blocking = true; // you want to set this so that nothing else can use this socket and fuck things up + m_wSocket.connect( sServer, (short)iPort ); // connect uses an unsigned short, so a cast is needed. (int was used because of other code) check if this returns true/false, pls + + // makin' headers (using SendData with raw data; http 1.0 in this case) + RString Header=""; + + Header = "GET "+sAddress+" HTTP/1.0\r\n"; + Header+= "Host: " + Server + "\r\n"; + Header+= "Connection: closed\r\n\r\n"; + + m_wSocket.SendData( Header.c_str(), Header.length() ); + + m_wSocket.blocking = false; // once you're done, you don't need to have the socket blocking anymore + + // some other code can go here... + + m_wSocket.close(); // and if you're done, you can close the socket. +} \ No newline at end of file diff --git a/Docs/interesting_sm4_commit_logs.txt b/Docs/interesting_sm4_commit_logs.txt new file mode 100644 index 0000000000..d2e0639f20 --- /dev/null +++ b/Docs/interesting_sm4_commit_logs.txt @@ -0,0 +1,20 @@ +Notable StepMania CVS commit logs +-------------------------------------------------------------------------------- +http://sourceforge.net/mailarchive/forum.php?thread_name=E1ICWkp-00073O-Ay%40mail.sourceforge.net&forum_name=stepmania-cvs +"Any given step can continue the combo, maintain the combo, break the combo, or +outright miss. Those that break the combo aren't misses and shouldn't increase +the miss counter but they should break the combo." +Yeah right it doesn't seem to do that... +-------------------------------------------------------------------------------- +http://sourceforge.net/mailarchive/message.php?msg_id=E1FWjDl-0000Ob-IY%40mail.sourceforge.net +"remove unfinished, crufty multiplayer stuff" ++ +http://sourceforge.net/mailarchive/message.php?msg_id=E1FWjpV-0007eC-2G%40mail.sourceforge.net +"remove unfinished multiplayer stuff" + +Some of the multiplayer stuff was later re-assembled but I think some of the +pieces are missing. +________________________________________________________________________________ +Viewing old source code: +http://stepmania.cvs.sourceforge.net/stepmania/stepmania/src/ +put a filename at the end of it. \ No newline at end of file diff --git a/Docs/license-ext/readme b/Docs/license-ext/readme new file mode 100644 index 0000000000..e11067fe6c --- /dev/null +++ b/Docs/license-ext/readme @@ -0,0 +1 @@ +lots of license documentation for something sm-ssc uses? it goes in here. \ No newline at end of file diff --git a/Docs/license-ext/vlgothic/Changelog b/Docs/license-ext/vlgothic/Changelog new file mode 100644 index 0000000000..7d1ce0b724 --- /dev/null +++ b/Docs/license-ext/vlgothic/Changelog @@ -0,0 +1,473 @@ +VLGothic(VLゴシック) フォント +-------------------------------------------------------------------------- + +更新履歴 +--------- + +* 2009/12/14 + - VL-PGothic/VL-Gothic の漢字部のグリフを 70 文字修正 + 踊趺跌趾蹲墫樽燿楠裾踞倨螺贖贋軌軒軟軫輊 + 輻輳轄軋轢礫擽櫟檪湊喪欶漱嗽絨毯毧毬毱毡 + 殉毀浣嗚噺噛咬頰眞槇塡填槙鷆鷏撒鴎鷗鴫鷺 + 鷲鶯蔦梟鵠鴬鸚鵡鴃鵙 + +* 2009/12/11 + - VL-PGothic/VL-Gothic の漢字部のグリフを 42 文字修正 + 颯爽頬頷秦榛蓬蓁藩薩珊瑚櫻懲騙騰塙墜塾堕 + 窮竆瑛斑瑳玖玩獅牟騨駝騏駈衡藍薙薜蒔韮蘇 + 荗蕉 + +* 2009/12/08 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.12.08 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 22 文字修正 + 喰瘤瘦鋳祷梼涛陦畴矩砺槌樋箕磐縞賠曼蔓幔 + 縵鏝 + +* 2009/12/02 + - VL-PGothic/VL-Gothic の漢字部のグリフを 33 文字修正 + 葦淀硫尻犠碁紺盲漂漸瑞智灘眠濫艦檻翼翻槻 + 棚瞳條篠鎌珠邑葛畿眺峯濁燭 + +* 2009/11/27 + - VL-PGothic/VL-Gothic の漢字部のグリフを 39 文字修正 + 糧款畳檜艇臀塗塞覆藻扇盾楯循徐厘澄薦耐邦 + 爵距弧圏摂遇僻譜慮輝畜蓄擬鶴粟凝逓粛慢 + +* 2009/11/17 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.11.17 の + CVS HEAD に更新 + +* 2009/08/11 + - VL-PGothic/VL-Gothic の漢字部のグリフを 42 文字修正 + 尿甚堪勘菖蒲茗扁蛸蜘蛛蜂蟇蝙蝠蝮蛆蜊蟻虻 + 蜻蜉蝣蝉蝋蝗蠣蟹蜒蛭蚯蚓萬牡牝牠牨露鉗鈶 + 鐘鎧 + +* 2009/08/10 + - VL-PGothic/VL-Gothic の漢字部のグリフを 34 文字修正 + 鬱蒼麗驪儷儚賈鵬喊嘉賽唖唸哭珈跡踵踝跳跙 + 赥薔薇替潜凡梵凪鳳凰施旈旋魯 + +* 2009/08/06 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.8.6 の + CVS HEAD に更新 + - VL-Gothic の文字幅を調整 + 互換性を高めるために Unicode で文字幅が Ambigious な + ものの一部を全角幅に変更。 + - VL-Gothic のキリル文字を M+1C から流用し全角幅に調整 + - VL-PGothic/VL-Gothic の以下の記号を修正 + ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ + ㏋ + - VL-PGothic/VL-Gothic の漢字部のグリフを 1 文字修正 + 褪 + - VL-PGothic/VL-Gothic の以下の文字のデザインを調整 + 嘔謳 + +* 2009/07/10 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.7.10 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 50 文字修正 + 顛躊躇疇儔籌鑄茨雰剱劔劒劔劍礆踏杢李杰桝 + 庶幽彬幣弊蔽卓悼曹遭槽漕糟艚糠籍蛮蜜蛤堺 + 壇壈凜凛衰衷悗俛浼梚 + +* 2009/07/03 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.7.3 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 71 文字修正 + 淋捌滑麺麹麸麵麴麩睡黑黙鹿麒麟麓棋尖殖襲 + 鑑鶏薪崇匿赦巧疎朧傘偵儲迭迀邪閈閒閝閞豚 + 荘鵜鴨鳩馮馳馴駐駒駕駮辡辣彙彗栖窯穿釜鎖 + 鎮琴琵琶琹栞饂饅饒飥窺 + - VL-Gothic のギリシャ文字およびキリル文字、および + 一部記号の文字幅を調整 + +* 2009/06/12 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.6.11 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 15 文字修正 + 剪彅騒衝桁撃駄裂塀滋舛舜瞬舞菊 + +* 2009/04/22 +- 縦書きグリフを指定する GSUB vert テーブルが ttf ファイル + から削られていたのを修正 + - VL-PGothic/VL-Gothic の漢字部のグリフを 1 文字追加 + U+20BB7 (土口の𠮷) + +* 2009/04/21 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 2009.4.20 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 13 文字修正 + 凌桃龍廣琉桑瑠毅嶋翔那懇杏 + +* 2009/02/02 + - VL-PGothic/VL-Gothic の M+1C,1M 部分を 200\9.2.1 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 40 文字修正 + 荒驚爲栓憊裕崎椅倚騎碕掎綺綻堵湧塊礁撤徹 + 盤随髄涼諒掠椋凉軸暇蝦匠窪荻叔淑俶督丼肇 + +* 2009/01/08 + - VL-PGothic/VL-Gothic の漢字部のグリフを162文字修正 + 既概慨漑晰踪輩巷帀已帖帆帝幇封晃幌幡謹廿 + 棄載償賄賢腎倶朕劣勃勅勧勞募搭塔茜俺奄壊 + 懐奪奨酉醤醂髪髭嘘噂喋蝶曇嘔歐嘖喫喉嗅臭 + 響項須凄凍磯巫滅滞溺竜滝溶澖潤澗臼潟溢溜 + 涯渉浄涅涌涎涙熊厨房圑團埋墨爆弾葬謎綴網 + 締絇逸迪越疫痴痰疹疵疸疽疾痩痬痺痒痔痕痘 + 癌癒疱瘡縁酷靖逃透逢遵較輌俢僅傾菌葵萩齋 + 齊藤薗蕾蓮葡萄缶牢亀縄蝿乚乜廃餃飣飩餇飾 + 餅餌 + - VL-PGothic/VL-Gothic に以下の漢字を1文字追加 + 俱(U+4ff1) + +* 2008/12/03 + - VL-PGothic/VL-Gothic の漢字部のグリフを 110 文字修正 + 歳戚戴培尉慰簿嵒撮撲播撫影環屈堀倔崛崫圭 + 桂綾煮勲嵒 + 扎扐扑扒扔扖扚拘扜扣扯扺扽抃抍抎抔抏抒抖 + 抦抨抬抳抶抷抺抻押抽抾抿拂拄拆拇拈拉拊拎 + 拏拑拕拗拙拚拪拮拯拱拲拳拴拵拶拷拼挨掛掘 + 揚挟捉挽握措据捗掻挂挃挄按挊挋挌挧捄捺捲 + 捶捷掀搬 + U+5D53 + - VL-PGothic/VL-Gothic に以下の全角記号を43文字追加 + U+329E,U+3299,U+329D,U+3296,U+3298,U+32A9 + U+322A,U+322B,U+322C,U+322D,U+322E,U+322F,U+3230 + U+3234,U+3235,U+3236,U+3237,U+3238,U+3239 + U+323A,U+323B,U+323C,U+323D,U+323E,U+323F + U+3240,U+3241,U+3242,U+3243 + U+337F,U+3315,U+3316,U+3339,U+3305,U+3333,U+334E,U+3342,U+3300 + U+331E,U+332A,U+3331,U+3347 + U+3020 + - VL-PGothic/VL-Gothic のメトリックを再度調整 + - VL-Gothic の下端/上端が切れる問題があったため、Descent offset を 0 に、 + Ascent offset を小さめに変更 + - VL-PGothic の上端が切れる問題があったため Ascent offset を小さめに変更 + +* 2008/11/23 + - VL-PGothic/VL-Gothic の M+1C,M,P 部分を 2008.11.23 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字/全角非漢字全部のグリフを75文字修正 + 渡彦譲徴微審融褒繊矯珍萌彩昌斎乃秀禿嗣曽 + 拠碩碍垣湾湿倒攻斬數斜倖來仯仢榮殿殻殼殴 + 湘漏帽逮迎逗邊邉达澤氿汜夅夆頑釈釉釋醍醐 + 冒涜渓渕渚躍憾懆躁突 + 仝 + ヸヹヺヷ + - VL-PGothic/VL-Gothic のメトリックを調整 + 行間を狭めに設定(Ascent/Descentのoffset調整) + +* 2008/10/29 + - VL-PGothic に M+1P(2008.10.29のCVS HEAD)から欧文グリフを追加 + - VL-PGothic/VL-Gothic に以下の全角記号を追加 + U+213B + U+25B4〜25BB,U+25BE〜U+25C5 + U+2660,U+2663,U+2665,U+2666 + U+2668,U+2669,U+266B,U+266C,U+266E + U+309F + - VL-Gothic に以下の全角記号を追加 + U+3099,U+309A,U+25CC + U+2190〜U+2199,U+2126,U+2127,U+213A + - 以下の全角記号を修正 + U+2661,U+2662,U+2664,U+2667 + - VL-Gothic の漢字グリフの更新もれ + 々 + - 「沈忱枕」が bold にならない問題を修正 + - VL-PGothic/VL-Gothic の漢字部のグリフを 2文字修正 + 御換 + +* 2008/09/08 + - VL-PGothic に M+1P(TESTFLIGHT 017) から欧文グリフを追加 + - VL-PGothic/VL-Gothic の漢字部のグリフを97文字修正 + 垢憶忖忝忤忰忱忻忽怪恥恫怖悟悠怨慕灸灼炉 + 炊炒炙烏烈烙烹焦挑揉揃揺扛扞扮找挿拓霊霞 + 霏霧霜霙霰雹零沈々丑紐狃羞偽菲饗暁圓國昇 + 麻磨摩鬼魔魁魂魅魍奈薄淡蛍梗柔糅蹂鞣淫遥 + 蔑蓼蹴兎其冖冠冤冥冨豪曖昧旦旭旺哉 + - VL-Gothicの逆疑問符(U+00BF)が左右反転していた問題を修正 + - LICENSE を変更し、M+ベースの新規グリフについてはM+ライセンス + を適用するようにしました + +* 2008/06/24 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.06.24 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを100文字修正 + 隼雀雇雁離雄崩崖岬嵐岐岡岳峙峠峡峰謳剣剤 + 剥剰剴拭括托扶扼抂抄抉抑壁璧琳嫁嬉姻妓妃 + 妄妖妬姆姐姑姜姙姥姦姶威娃娑娟娥娩娵娼娶 + 婆婉婢婬婪婿媒媚媽嫌嫖嫐嬲嫻嫺嬢嬬嫦嬌孃 + 卑碑脾俾裨髀兼謙譲醸壌穣驤釀讓穰壤攘禳襄 + +* 2008/06/10 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.06.10 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを100文字修正 + 菅茸荀筍療盃盆監華喧嘩咥姪娚甥瞑尋醒捻挫 + 瀬朗朋尚巡歓欣欧欽欺妙噴憤墳濆齢硬僕濡潰 + 裏懸勿漫於堅暫繋裸浸濃疲諾 + 魴鮃鮎鮑鮒鮓鮖鮗鮟鮠鮨鮪鮫鮭鮮鮴鮹鯀鯆鯉 + 鯏鯑鯒鯖鯛鯢鯡鯣鯤鯨鯰鯱鯲鯵鰉鰊鰍鰤鰻鱈 + 鰯鰹鱇鱒鱗鱧鰾 + +* 2008/06/03 + - VL-PGothic/VL-Gothic の漢字部のグリフを40文字修正 + 姫媛瘍症啓蒙普晒暈儀携搾某枕妥掲咏咐哂 + 惨忙怠串患忍恨恒恍怯悔悸慇懃憧愕惜惰愚悶憩 + +* 2008/06/01 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.06.01 の + CVS HEAD に更新 + +* 2008/04/29 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.04.29 の + CVS HEAD に更新 + +* 2008/04/28 + - VL-PGothic/VL-Gothic の更新 + - ,.の位置を M+ と同じに変更 + - /\[]のグリフと位置を修正 + +* 2008/04/20 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.04.20 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic に [aiueo]macron を追加。 + āīūēō + U+0101,U+012B,U+016B,U+0113,U+014D + +* 2008/03/27 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2008.03.27 の + CVS HEAD に更新 + +* 2007/12/15 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.12.15 の + CVS HEAD に更新 + - VL-Gothic で一部文字を全角幅に変更 + §¨°´¶÷ + - VL-PGothic/VL-Gothic のグリフ追加 + U+22EF,U+03D2,U+03D3,U+03D4 + U+03D6,U+2022,U+2044,U+2111 + U+2116,U+2122™ + U+301D,U+301E,U+301F + +* 2007/10/31 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.10.31 の + CVS HEAD に更新(更新ミス修正) + +* 2007/10/31 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.10.31 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 48 文字修正 + 閂閃閇閊閏閔閖閘閙閠閣閤閥閧閨閭閲閾 + 阡阪防阻阿陀陂附陌陏限陛陣陥陪陰陲陵険隅隆隔際障隣隨 + 或域曰彰 + - 誤字を修正 + 酵 + +* 2007/10/15 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.10.15 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 206 文字修正 + 肋肌肘肚肛肝股肢肥肩肪肯肱肴肺胄胆背胎胖胙胚胛胝 + 胡胤胥胱胴胸胼能脂脅脇脉脊脚脛脣脩脯脱脳脹脾腆腋 + 腎腐腑腓腔腟腥腫腰腱腸腹腺腿膀膏膚膜膝膠膣膤膨膰 + 膳膵膸膿臆臉臓 + 芋芍芒芙芝芦芥芫芬芭芯芳芹苅苒苓苔苗苙苛苜苞苟苡 + 苣若苧苫苺苻茂范茄茅茎茹夢蔵著 + 淕尼泥泪泰洒洛洞津洩洪洲 + 努労励栃勇効劾 + 罪罫罰署置罵 + 弁 渋 郵 政 垂 紘 冑 式 圧 在 拌絆袢 疋 典 要 退 + 複 被 裁 旁傍 窒 虎虜虚虐 善繕 卒 崔 隋 瞼 舫般 + 巴巳 亡 忘志 矛 如 了 漠 超赴趣 睦陸 律 曳 環 境 + 畿 変恋 夛 奴怒 刻核 悩 礎 + +* 2007/10/06 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.10.05 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 240 文字修正 + - 半角カナ58文字、漢字182文字 + 仰伉伍伎伐伜佗佚佛佝佞佩佯佰佳佶侘侶俊俐俔俘俚 + 俛俟俣俤俥修俯俸催債傷 + 犯犲状犹狂狆狎狐狗狙狛狡狩独狭狸狼狽猛猟猥猪猫 + 献猶猾猿獄獏獣獲 + 广庁庄庇床府 + 卩卯卵即却卸 + 氾汀汎汐汕汗汚汝江汢汨汪汰汲汳汾沁沂沈沌沍沐沓 + 沖沙沚沛没沫沮沱河沸沺沼沽沾沿況泄泅泌泓法泗泙 + 泛泝泡 + 熱勢 竣駿峻悛逡 的 蛇 凧 震 臨 闘闇閑 陳 模 + 収双 奉 職識織 戦単 務 至 降 基 操繰 権 契 + 版 片 緊 互 辰振賑娠宸唇 索 囚 弘 乏之 + 包砲胞鞄庖抱飽 革 + - VL-PGothicの「&」(アンパサンド) の半角および全角の + 字形を M+2C の標準形のものに変更 + - VL-Gothic の「±」および「×」の字幅を全角幅に変更 + +* 2007/09/29 + - VL-PGothic/VL-Gothic の漢字部のグリフを 226 文字修正 + 政故敍敏敕敗敘敢敦敬敲敵敷致 + 叙 摘嫡滴鏑 郭淳惇 必性 + 訂訃訊訌討託訝訟訣訪許訳訴訶診註証詐詑詔評詞詠 + 詢詣詫詬詭詮詰該詳誅誇誉誌認誓誕誘誠誡誤誦説誰 + 誹諄請諏論諚諜諞 + 延 悦 排徘琲 + 谺欲棆倫輪淪綸 + 酊酌酎酔酢酣酩酪酬酵醇 + 別判刈刊到刹刻剃剋剌剛剞 + 輔捕浦補舗哺鋪埔 + 它宅宇宋宍宏宕宗宙宜宝宣宥宦宰宴宵寂寃寄寅密寛 + 寝寡寧審寮 + 巨 臣 格 辮 初 埼崎 + 瞭遼撩僚暸燎繚 + 釖釛釟釿鈍鈔鈕鈞鈩鈬鈴鈷鉅鉈鉉鉾銃銅銑銓銖銘銚 + 銛銭鋭鋲鋳鋸鋺鋼錆錐錠錦錫錬錯録鍋鍵 + 過 浅 浜 寿 居 均 沢 推 + 弦舷絃呟眩玄率 + 碗腕蜿婉豌苑 + +* 2007/09/24 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.09.24 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 221 文字修正 + 租私秣秤秧秩秬称稀程税稔稗稙稚稜種稲稼穀穂積穏 + 竺竿笑笘笞笠笥符笹筑筋筒策箇箔箸節築箪範篤 + 籵粉粋粒粕粗粘精糊 + 糺糾紂約紅紋納純紗紛素紡紫紬累紳紹絆絋経絞絡絢 + 絣統絶絹継続綜績 + 雫雷需霧 + 頁頂頃項順須預頒領頷頻頼額顎顕類顧 + 釘針釣釦釧鈎鈑鈿鉋鉛鉢鉤鉱 + 朱朴朷朸机朽杉杖杜杞杭杯杵松析枚枝枠枢枦枯枴架 + 柄柊柏柑柘柚柯柴桟桧桶梅梨梯梱棒 + 棟棯棲棹棺椀椎楊楓楚楢 + 什仁仂仇仗仟令任仮仲企伊伏伐伝估伴伶伸伺似伽佃 + 佇佐佑併例侍侑供依侠価侭侫侮侯侵 + 便俄促俗俳俵値 + 冷浴技拐袈利哀 + +* 2007/09/15 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.09.14 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを 75 文字修正 + 呼呻咀咄叱叮吊叩咤叶叺叨叫叭史吁吃吋吐吟吠否 + 吩含听吭吮吹吻吼吽吾呀呂呆呉呑呟呪呰呵呷咋咲咽哄 + 船舶舵厚鈴賞術簡易技拍拒抹抵抗折押授低邸 + 製制刷割剖則別刺刻 + - 「呼」が bold にならない問題を修正 + +* 2007/09/01 + - VL-PGothic/VL-Gothic の漢字部のグリフを修正 + - 一部グリフの bold にならない問題を修正 + +* 2007/08/30 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.08.30 の + CVS HEAD に更新 + - VL-PGothic/VL-Gothic の漢字部のグリフを修正 + +* 2007/07/31 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.07.31 の + CVS HEAD に更新 + - VL-PGothic に以下の文字を追加 + - Unicode U+2160〜U+216F (ROMAN NUMERAL) + - Unicode U+2201,U+2204,U+2206 + - VL-PGothic の以下の文字を更新 + - Unicode U+2200,U+2203,U+2204,U+2207 + - VL-Gothic に以下の文字を追加 + - Unicode U+2160〜U+2165 (ROMAN NUMERAL) + - VL-PGothic の以下の文字を更新 + - Unicode U+2200,U+2203,U+2207 + +* 2007/05/07 + - VL-Gothic に以下の文字を追加 + - Unicode U+00A0〜U+00FF + - Unicode U+0132,U+0133,U+0160,U+0161,U+0178,U+017D,U+017E + +* 2007/05/06 + - VL-PGothic に以下の文字を追加 + - Unicode U+00A0〜U+00FF + - Unicode U+0132,U+0133,U+0160,U+0161,U+0178,U+017D,U+017E + +* 2007/05/03 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.05.03 の + CVS HEAD に更新(M+漢字グリフも収録) + +* 2007/03/28 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.03.28 の + CVS HEAD に更新(M+漢字グリフも収録) + - VL-PGothic/VL-Gothic の "℃" が freetype-2.2 で bold にならなかった + のを修正 + +* 2007/03/17 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2007.03.17 の + CVS HEAD に更新(M+漢字グリフも収録) + - VL-PGothic/VL-Gothic の漢字部の百文字程度のグリフを修正 + - 壊れたグリフ(○付き数字)を修正 + - 記号(機種依存文字)を追加作成し収録 + +* 2007/01/01 + - VLGothic/VLPGothic の一部の文字が freetype-2.2.1 で bold にならな + かったのを修正 + +* 2006/12/31 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2006.12.31 の + CVS HEAD に更新(M+漢字グリフは未収録) + - VL-PGothic/VL-Gothic の漢字部の数百文字程度のグリフを修正 + +* 2006/10/26 + - ギリシャ文字の重複パスの除去 + - VL-PGothic のギリシャ文字のサイドベアリングを調整し、可変幅に変更 + - ライセンスファイルを README から分割 + +* 2006/10/21 + - VLGothic の "o" が freetype-2.2.1 で bold にならなかったのを修正 + +* 2006/10/20 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部を TESTFLIGHT012 ベースに更新 + - 重複パスの除去 + - パスの向きを修正 + - 一部古いグリフにもどっていたのを修正 + +* 2006/10/05 + - 重複パスの除去 + - パスの向きを修正 + - 一部漢字部のグリフ修正 + +* 2006/09/30 + - 重複パスの除去 + - パスの向きを修正 + +* 2006/09/29 + - 重複パスの除去 + - パスの向きを修正 + - 一部漢字部のグリフ修正 + +* 2006/09/25 + - 入れ忘れていた縦書用のGSUBテーブルを追加 + - 一部漢字部のグリフ修正 + +* 2006/09/21 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2006.09.21 の + CVS HEAD に更新。 + - 一部漢字部のグリフ修正 + +* 2006/09/13 + - 一部グリフ修正 + - VL-Gothic の半角スペース幅の修正 + +* 2006/09/11 + - VL-PGothic/VL-Gothic の M+1C, M+1M 部分を 2006.09.11 の + CVS HEAD に更新。 + - 一部の縦書用グリフを更新 + +* 2006/09/02 + - VL-Gothic の panose 設定を monospace に変更。 + - 日本語フォント名を追加(VLゴシック、VL Pゴシック) + +-------------------------------------------------------------------------- +Copyright (C) 2003-2006 M+ FONTS PROJECT +Copyright (C) 1990-2003 Wada Laboratory, the University of Tokyo. All rights reserved. +Copyright (C) 2003-2004 Electronic Font Open Laboratory (/efont/). All rights reserved. +Copyright (C) 2006 Daisuke SUZUKI <daisuke@vinelinux.org> +Copyright (C) 2006 Project Vine <Vine@vinelinux.org> diff --git a/Docs/license-ext/vlgothic/LICENSE b/Docs/license-ext/vlgothic/LICENSE new file mode 100644 index 0000000000..ee044c847b --- /dev/null +++ b/Docs/license-ext/vlgothic/LICENSE @@ -0,0 +1,48 @@ +VL ゴシックフォントファミリライセンス +------------------------------------- + +M+ FONTS 由来の部分については、M+ FONTS PROJECT のライセンスが適用されます。 +添付の LICENSE_J.mplus を参照してください。 + +さざなみゴシックフォント由来の部分およびそれらの部品を元に改変した一部の文字 +については、さざなみフォントと同様に修正BSDライセンスとします。オリジナルの +さざなみフォントのライセンスについては添付の README.sazanami を参照してくだ +さい。 + +その他 VL ゴシックフォントファミリで独自に追加した文字、および M+フォント +の部品を元に独自に作成した文字(2007/05/06以降に修正した漢字および記号)はM+ +フォントと同じライセンスを摘要します。 + +なお、文書への埋め込みなど、フォントとしての再使用を目的としない用途におい +ては、以下で言う Redistribution には当たらず、制限なく行えるものとします。 + +Copyright (c) 1990-2003 Wada Laboratory, the University of Tokyo. +Copyright (c) 2003-2004 Electronic Font Open Laboratory (/efont/). +Copyright (C) 2002-2009 M+ FONTS PROJECT +Copyright (C) 2006-2009 Daisuke SUZUKI <daisuke@vinelinux.org>. +Copyright (C) 2006-2009 Project Vine <Vine@vinelinux.org>. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the Wada Laboratory, the University of Tokyo nor + the names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY WADA LABORATORY, THE UNIVERSITY OF TOKYO AND +CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LABORATORY OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Docs/license-ext/vlgothic/LICENSE.en b/Docs/license-ext/vlgothic/LICENSE.en new file mode 100644 index 0000000000..836c4b12ba --- /dev/null +++ b/Docs/license-ext/vlgothic/LICENSE.en @@ -0,0 +1,49 @@ +License for VLGothic Font Family +-------------------------------- + +This font includes glyphs derived from M+ FONTS which is created by +M+ FONTS PROJECT. License for M+ FONTS part is described in M+ FONTS +PROJECT's license. See attached 'LICENSE_E.mplus'. + +This font also includes glyphs derived from Sazanami Gothic font which +is created by Electronic Font Open Laboratory (/efont/). License for +Sazanami Gothic part is described in it's license. See attached +'README.sazanami' for original Sazanami Gothic font license. + +This font also includes original glyphs which is created by Daisuke +SUZUKI and Project Vine based on M+ FONTS. Licese for VL Gothic +original glyphs is same as M+ FONTS PROJECT's license. + +There is no limitation and the below description is not applied +as for in order not to reuse as font (ex: font is embeded to documents). + +Copyright (c) 1990-2003 Wada Laboratory, the University of Tokyo. +Copyright (c) 2003-2004 Electronic Font Open Laboratory (/efont/). +Copyright (C) 2003-2009 M+ FONTS PROJECT +Copyright (C) 2006-2009 Daisuke SUZUKI <daisuke@vinelinux.org>. +Copyright (C) 2006-2009 Project Vine <Vine@vinelinux.org>. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the Wada Laboratory, the University of Tokyo nor + the names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY WADA LABORATORY, THE UNIVERSITY OF TOKYO AND +CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LABORATORY OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Docs/license-ext/vlgothic/LICENSE_E.mplus b/Docs/license-ext/vlgothic/LICENSE_E.mplus new file mode 100644 index 0000000000..cd4ab47eef --- /dev/null +++ b/Docs/license-ext/vlgothic/LICENSE_E.mplus @@ -0,0 +1,16 @@ +M+ FONTS Copyright (C) 2002-2007 M+ FONTS PROJECT + +- + +LICENSE_E + + + + +These fonts are free softwares. +Unlimited permission is granted to use, copy, and distribute it, with +or without modification, either commercially and noncommercially. +THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY. + + +http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/ diff --git a/Docs/license-ext/vlgothic/LICENSE_J.mplus b/Docs/license-ext/vlgothic/LICENSE_J.mplus new file mode 100644 index 0000000000..0979407ccb --- /dev/null +++ b/Docs/license-ext/vlgothic/LICENSE_J.mplus @@ -0,0 +1,15 @@ +M+ FONTS Copyright (C) 2002-2007 M+ FONTS PROJECT + +- + +LICENSE_J + + + + +ΥեȤϥե꡼ʼͳʡ˥եȥǤ +Ѥ̵ͭ˴ؤ餺ޤŪѤǤäƤ⡢ͳˤѡ +ʣۤ뤳ȤǤޤ̵ݾڤȤƤޤ + + +http://mplus-fonts.sourceforge.jp/ diff --git a/Docs/license-ext/vlgothic/README b/Docs/license-ext/vlgothic/README new file mode 100644 index 0000000000..24f616108a --- /dev/null +++ b/Docs/license-ext/vlgothic/README @@ -0,0 +1,62 @@ +VLGothic(VLゴシック) フォントファミリ + 2009.12.14 +-------------------------------------------------------------------------- + + +本フォントは、Project Vine の鈴木大輔により以下の作業を行って作成した +モダンゴシック体の日本語 TrueType フォントです。 + + * M+ FONTS PROJECT による M+1C、M+1P および M+1M フォントを英数字、 + かな、および一部の漢字(教育漢字を含む1926文字)に使用 + * 不足部分の一部(約2410文字)をProject Vine の 鈴木大輔が M+ の漢字部 + 品を元に新規に製作したものを使用 + * 残りの部分 Electronic Font Open Laboratory によるさざなみゴシック + フォントをベースに Project Vine の鈴木大輔が改変(500文字程度)したも + ので補填 + * Latin 1 Supplement を含む一部の文字、記号をM+の英数などの部品を元 + に作成したものを追加(VLGothic) + * 全角記号の一部を新規に作成し追加 + * ギリシャ文字をSans-serif風に修正 + +VLゴシックフォントファミリ +-------------------------- + +VLGothic には M+ 1C Regular と組み合わせたプロポーショナルフォントである +VL PGothic フォントと、M+ 1M Regular と組み合わせた固定幅フォントである +VL Gothic フォントが含まれます。 + +- 可変幅フォント VL-PGothic-Regular.ttf +- 固定幅フォント VL-Gothic-Regular.ttf + + +ライセンス +---------- + +M+ FONTS 由来の部分については、M+ FONTS PROJECT のライセンスが適用されます。 +添付の LICENSE_J.mplus を参照してください。 + +さざなみゴシックフォント由来の部分およびそれらの部品を元に改変した一部の文字 +については、さざなみフォントと同様に修正BSDライセンスとします。オリジナルの +さざなみフォントのライセンスについては添付の README.sazanami を参照してくだ +さい。 + +その他 VL ゴシックフォントファミリで独自に追加した文字、および M+フォント +の部品を元に独自に作成した文字(2007/05/06以降に修正した漢字および記号)はM+ +フォントと同じライセンスを摘要します。 + +VLゴシックフォントファミリ全体のライセンスは添付の LICENSE を参照してくだ +さい。 + + +変更履歴 +-------- + +添付の Changelog を参照してください。 + + +-------------------------------------------------------------------------- +Copyright (C) 1990-2003 Wada Laboratory, the University of Tokyo. All rights reserved. +Copyright (C) 2003-2004 Electronic Font Open Laboratory (/efont/). All rights reserved. +Copyright (C) 2003-2009 M+ FONTS PROJECT +Copyright (C) 2006-2009 Daisuke SUZUKI <daisuke@vinelinux.org> +Copyright (C) 2006-2009 Project Vine <Vine@vinelinux.org> diff --git a/Docs/license-ext/vlgothic/README.sazanami b/Docs/license-ext/vlgothic/README.sazanami new file mode 100644 index 0000000000..f992cc3341 --- /dev/null +++ b/Docs/license-ext/vlgothic/README.sazanami @@ -0,0 +1,183 @@ +ʤߥեȤˤĤ + +ΥեȤϡCommon Lisp ˰ܿ줿ĸեȥå (CLWFK) +ѤƼưŪ줿եȤȡ¸βѼͳʥӥåȥޥåץե +Ȥ߹碌ƺʪǤ + +ʸιŪˤեإեȤȤۤƱǤȥ +ǡˤޤ̤äνԤƤޤŪˤϡץβ +ˤꡢǥʼޤäƤȻפޤ + +ΥСϺǽΥ꡼ǡʼԴʪǤ +եإեȤꡢԶ礬ȯǽϹ⤤Ǥ礦 +ȯޤ餴𤤤ȹǤ + +ϢȤƤ efont-devel ᡼󥰥ꥹȤե򤴻Ѥ +ɤ http://sourceforge.jp/projects/efont/ 饢Ǥޤ + + +饤 + +ХʥϡɤΥ饤󥹤ƱȤޤեȤ +ʸؤߤʤɡեȤȤƤκƻѤŪȤʤӤˤƤϡ +ʲǸ Redistribution ˤ餺¤ʤԤΤȤޤ + +Copyright (c) 1990-2003 + Wada Laboratory, the University of Tokyo. All rights reserved. +Copyright (c) 2003-2004 + Electronic Font Open Laboratory (/efont/). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the Wada Laboratory, the University of Tokyo nor + the names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY WADA LABORATORY, THE UNIVERSITY OF TOKYO AND +CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LABORATORY OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ޤ줿ӥåȥޥåץեȤΥ饤󥹤ˤĤƤϡƥեȤź +ɥȤƱƤޤΤǡ򤴻Ȥ + +ܥեȤ˴ޤޤեͳΥդϡǷñȤǺ +ꥸʥǥ˴Ť Public Domain ΥǡΤߤޤޤƤޤ +ΩȥץХ󥯤ˤ곫ȯ줿 32 ɥåȥӥåȥޥåפͳ褹 +ǡӥåȥޥåץǡߤ CLWFK 饤󥹤Ȱۤʤ饤 +ۤƤĸեȤͳ褹ǡϴޤޤƤޤ + + +ӥɴĶ + +FontForge (20040601) ˡʲΥѥåƤƺƤޤϡ +եȤɬפȤĶDz +ޤ줿ӥåȥޥåפͭˤʤʤ +Ȥ褹뤿ΤΤǤꥸʥ FontForge +Ǥ餦ͽǤ + +--- fontforge/tottf.c.orig Mon Jun 7 19:18:27 2004 ++++ fontforge/tottf.c Wed Jun 16 13:37:06 2004 +@@ -3038,6 +3038,8 @@ + int i,j,cnt1,cnt2,first,last,avg1,avg2,k; + SplineFont *sf = _sf; + char *pt; ++ static int const weightFactors[26] = { 64, 14, 27, 35, 100, 20, 14, 42, 63, ++ 3, 6, 35, 20, 56, 56, 17, 4, 49, 56, 71, 31, 10, 18, 3, 18, 2 }; + + os2->version = 1; + os2->weightClass = sf->pfminfo.weight; +@@ -3102,9 +3104,10 @@ + if ( sf->chars[i]->width!=0 ) { + avg2 += sf->chars[i]->width; ++cnt2; + } +- if ( sf->chars[i]->unicodeenc==' ' || +- (sf->chars[i]->unicodeenc>='a' && sf->chars[i]->unicodeenc<='z')) { +- avg1 += sf->chars[i]->width; ++cnt1; ++ if ( sf->chars[i]->unicodeenc==' ') { ++ avg1 += sf->chars[i]->width * 166; ++cnt1; ++ } else if (sf->chars[i]->unicodeenc>='a' && sf->chars[i]->unicodeenc<='z') { ++ avg1 += sf->chars[i]->width * weightFactors[sf->chars[i]->unicodeenc-'a']; ++cnt1; + } + } + } +@@ -3122,9 +3125,9 @@ + while ( pt<os2->achVendID ) *pt++ = ' '; /* Pad with spaces not NUL */ + + os2->avgCharWid = 500; +- /*if ( cnt1==27 ) +- os2->avgCharWid = avg1/cnt1; +- else*/ if ( cnt2!=0 ) ++ if ( cnt1==27 ) ++ os2->avgCharWid = avg1/1000; ++ else if ( cnt2!=0 ) + os2->avgCharWid = avg2/cnt2; + memcpy(os2->panose,sf->pfminfo.panose,sizeof(os2->panose)); + if ( format==ff_ttfsym ) { +@@ -3349,11 +3352,34 @@ + putshort(at->os2f,0); + } + +-static void dumpgasp(struct alltabs *at) { ++static void dumpgasp(struct alltabs *at, SplineFont *sf) { ++ BDFFont *bdf; ++ uint32 bitmaps = 0; ++ int i, rangecnt = 1; ++ ++ for ( bdf=sf->bitmaps; bdf!=NULL; bdf=bdf->next) { ++ if ( BDFDepth(bdf)==1 && bdf->pixelsize<=32 ) ++ bitmaps |= 1<<(bdf->pixelsize-1); ++ } ++ for ( i=1; i<32; i++ ) { ++ if ( (bitmaps&(1<<i))!=((bitmaps&(1<<(i-1)))<<1) ) ++ rangecnt++; ++ } ++ if (bitmaps&(1<<31)) rangecnt++; + + at->gaspf = tmpfile(); + putshort(at->gaspf,0); /* Version number */ +- putshort(at->gaspf,1); /* One range */ ++ putshort(at->gaspf,rangecnt); /* One range */ ++ for ( i=0; i<31; i++ ) { ++ if ( (bitmaps&(1<<i))<<1 != (bitmaps&(1<<(i+1))) ) { ++ putshort(at->gaspf, i+1); ++ putshort(at->gaspf, bitmaps&(1<<i) ? 0x0 : 0x2); ++ } ++ } ++ if ( bitmaps&(1<<31) ) { ++ putshort(at->gaspf,32); ++ putshort(at->gaspf,0x0); ++ } + putshort(at->gaspf,0xffff); /* Upper bound on pixels/em for this range */ + putshort(at->gaspf,0x2); /* Grey scale, no gridfitting */ + /* No hints, so no grids to fit */ +@@ -4730,7 +4756,7 @@ + redoos2(at); + if ( format!=ff_otf && format!=ff_otfcid && format!=ff_none ) { + if ( !SFHasInstructions(sf)) +- dumpgasp(at); ++ dumpgasp(at, sf); + at->fpgmf = dumpstoredtable(sf,CHR('f','p','g','m'),&at->fpgmlen); + at->prepf = dumpstoredtable(sf,CHR('p','r','e','p'),&at->preplen); + at->cvtf = dumpstoredtable(sf,CHR('c','v','t',' '),&at->cvtlen); + + + +ѹ + +2004-06-18 ǽΥС + +2004-06-21 ޥʡԶνΥȥ饤 + +Ľ񤭤 'vert' 'vert' եѤ褦ѹ +Oradano פʸѥʣ +Latin1 ΥȤĤʸ򡢹褦ˤƤߤ +ī U+FF02 ä U+FF01 ٤ƤΤ +PostScript ̾˶򤬴ޤޤƤΤǡ'-' ִ + +ѹˤĽ񤭤ǤʤʤäƤᡢα + +2004-06-29 ΥСԶν + +ʣˤäƥȥ饤󤬲줿ʸ +ī: 5E43, 72A7, 7FB2, 855A, 9120 + å: 5804, 5DC7, 6969, 7768 (), 789E, 8CC7 (), 8EF1, 9193 + (9090 9115 ϰ줿ޤޤǤ) +vert ʳ OpenType 쥤ȥ GSUB ơ֥뤫 +ߥӥåȥޥå (ayu ͳ) γդ󥳡ɤƤ餺 +Ľ񤭤ξ񤭤β̾ݿ˲ƤΤ +βۥåɤξü y ɸ 1000 ˤʤХäΤ + 1024 ʬ 24 㤫äȤˤʤ롣 diff --git a/Docs/license-ext/vlgothic/README_J.mplus b/Docs/license-ext/vlgothic/README_J.mplus new file mode 100644 index 0000000000..5821ee16e9 --- /dev/null +++ b/Docs/license-ext/vlgothic/README_J.mplus @@ -0,0 +1,160 @@ +M+ FONTS Copyright (C) 2002-2007 M+ FONTS PROJECT + +- + +README_J + + + + + M+ TESTFLIGHT + +M+ OUTLINE FONTS ˶̣򤪻꤬Ȥޤ +ΥեȥåȤ 2 Ѹʸ M+ 1 M+ 2 +4 βѿ M+ PType-1/2ˤ M+ CType-1/2ˡ +3 ȾѸѿ M+ MType-1/2ˤ M+ MN 鹽Ƥޤ + +줾 thin black ޤǤ 7 ȾѸѿ bold ޤǤ +5 ˤΥȥХꥨѰդ졢 ʸȱѿȤ߹碌 +43 Υեǡ7 ĤΥեȥեߥƤޤ + + +եȡʤʸѸѻϲ + +M+ 1P mplus-1p-thin.ttf + mplus-1p-light.ttf + mplus-1p-regular.ttf + mplus-1p-medium.ttf + mplus-1p-bold.ttf + mplus-1p-heavy.ttf + mplus-1p-black.ttf + +M+ 2P mplus-2p-thin.ttf + mplus-2p-light.ttf + mplus-2p-regular.ttf + mplus-2p-medium.ttf + mplus-2p-bold.ttf + mplus-2p-heavy.ttf + mplus-2p-black.ttf + +M+ 1C mplus-1c-thin.ttf + mplus-1c-light.ttf + mplus-1c-regular.ttf + mplus-1c-medium.ttf + mplus-1c-bold.ttf + mplus-1c-heavy.ttf + mplus-1c-black.ttf + +M+ 2C mplus-2c-thin.ttf + mplus-2c-light.ttf + mplus-2c-regular.ttf + mplus-2c-medium.ttf + mplus-2c-bold.ttf + mplus-2c-heavy.ttf + mplus-2c-black.ttf + + +եȡʤʸѡѿȾѤθ + +M+ 1M mplus-1m-thin.ttf + mplus-1m-light.ttf + mplus-1m-regular.ttf + mplus-1m-medium.ttf + mplus-1m-bold.ttf + +M+ 2M mplus-2m-thin.ttf + mplus-2m-light.ttf + mplus-2m-regular.ttf + mplus-2m-medium.ttf + mplus-2m-bold.ttf + +M+ 1MN mplus-1mn-thin.ttf + mplus-1mn-light.ttf + mplus-1mn-regular.ttf + mplus-1mn-medium.ttf + mplus-1mn-bold.ttf + + + + + ¾ΥեȤδ䴰 + +M+ OUTLINE FONTS ѤĶˤäƼưŪˡޤɬפ˱ǡ +ʤɤ̤ʸ¾ʸեȤ䴰ޤ + + + UNIX/Linux (XFT) + +ưŪ䴰ޤǤդʸեȤ䴰 +fonts.conf ꤬ɬפǤ + + + Mac OS X 10.4 + +Safari.app TextEdit.app ʤɤǤϼưŪ˥ҥ饮γѥ䴰졢 +ˤбƤޤ +FireFox ǤϸҤΡIPA եȤȤιեȡפޤᡢ +ɽޤ + + + Windows XP + +եȥ󥯤䴰ޤ䴰줿ʸɽʤͤǤ +ҤΡIPA եȤȤιեȡפƤߤƲ + + + + + IPA եȤȤι + +Ʊ m++ipag.pe ץȤ IPA եȡipag.ttfˡFontForge ץ +Ѥơipag.ttf 䴰줿եȤǤޤ +ɬפʥեȥץϰʲ̤Ǥ + + + IPA եȤȤιɬפʥեȥץ + + mplus-1p-regular.ttf *1 + mplus-2p-regular.ttf *1 + mplus-1c-regular.ttf *1 + mplus-2c-regular.ttf *1 + mplus-1m-regular.ttf *1 + mplus-2m-regular.ttf *1 + mplus-1mn-regular.ttf *1 + m++ipag.pe *1 + ipag.ttf *2 + fontforge *3 + +*1 M+ TESTFLIGHT ƱƤޤ +*2 http://www.grass-japan.org/FOSS4G/readme-grass-i18n-ipafonts.eucjp.htm +*3 http://fontforge.sourceforge.net/ + + + եȤ + +fontforge ʳΥեƱǥ쥯ȥ֤ʲΥޥɤ¹Ԥޤ +- +$ ./m++ipag.pe +- +7 Ĥ M+*+IPAG.ttf ե뤬ޤΤǡIPA եȤΥ饤󥹤 +äƤѤ +Mac OS X ǥ󥹥ȡ뤹ݤ˷ٹ̤ɽϡåᡢ +ǧܥ򥯥åơŪ˥󥹥ȡ¹ԤƤߤƤ + + + + + 䤤碌 + +M+ OUTLINE FONTS ξܺ١䤤碌ʤɤϰʲ URL Ѥ + +- + +M+ OUTLINE FONTS +http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/ + +mplus-fonts-dev ML +http://lists.sourceforge.jp/mailman/listinfo/mplus-fonts-dev + +M+ FONTS open forum +http://sourceforge.jp/forum/forum.php?forum_id=3403 diff --git a/Docs/midiman.wishlist b/Docs/midiman.wishlist new file mode 100644 index 0000000000..16c8e5be48 --- /dev/null +++ b/Docs/midiman.wishlist @@ -0,0 +1,25 @@ +force gamestate variables + ex: + GAMESTATE:SetCurrentStage('Stage_2nd'); + +force preference setting through gamecommand +(completed by AJ on 20090719 using setpref,prefname,value) + ex: + Choice1="confset,BGAnimations['RandomBackgroundMode_RandomMovies']" + +gamecommand on ssmaster for custom options menu + ex: + Choice1="gamecommand;confset,blah" + hand-in-hand with gamecommand confset + +lua-return strings for audio +(completed by AJ on 20090905) + ex: ScreenSelectMusic loop music.lua -> + if GAMESTATE:GetStagesLeft() > 1 then + return "_Music normal"; + else + return "_Music last"; + end + end + +Midi: create clone of Languages system, but different \ No newline at end of file diff --git a/Docs/old_changelog.txt b/Docs/old_changelog.txt new file mode 100644 index 0000000000..7db3baea65 --- /dev/null +++ b/Docs/old_changelog.txt @@ -0,0 +1,814 @@ +sm-ssc Changelog (mainly source code related) +_________________________________________________________________________ +All changelogs go by SVN revision number* for the time being. + +Not all changes are documented, as some were later reverted and other +features are meant to be undocumented for various reasons. + +Some changes are grouped together even though the commits may have +happened at different times. + +All times are in 24 hour format, Central Standard Time (UTC-6) unless between +dates where daylight savings time is in effect in the United States (then +it's UTC-5). +_____________________________________________________________________________ + +sm-ssc Private Beta Wave 1.1 | 20091208 +--------------------------------------- +The next Private Beta release will be termed Wave 1.1, and will be released +to current sm-ssc beta testers on December 8th, 2009. + +Bugfixes aren't listed here unless they're source code-related, usually. +See the bugtracker at http://ssc.ajworld.net/sm-ssc/bugtracker/ for bugs/feature +requests and their status. + +In addition to the bugfixes, the following changes have been made: + +r130 | 20091203 15:17:13 +------------------------ +Two new GameCommands: +* fademusic,fVolume,fDuration (though I wish fDuration was how long to fade the + music for; instead the fade lengths are consts in GameSoundManager.) +* pushscreen,sScreenName (though it doesn't push screens like I had thought it + would. maybe I'm doing it wrong.) [AJ] + +r129 | 20091202 21:56:54 +------------------------ +Modified character camera values. [shakesoda] + +r128 | 20091202 01:16:28 +------------------------ +* Profile name max length changed from 12 to 32 characters. + +r127 | 20091201 23:43:10 +------------------------ +* [ScreenSelectMusic] new metric SamplePreviewMusicMode, which has one of two + possible values as of r127. 'SamplePreviewMusicMode_Normal' is business as + usual (sample music plays), while 'SampleMusicPreviewMode_ScreenMusic' + disables song samples, using /{theme}/Sounds/ScreenSelectMusic loop music.* + as the file to play. No, this doesn't support Lua music yet. [AJ] + +sm-ssc Private Beta Wave 1 | 20091201 +------------------------------------- +The list below comprises sm-ssc Private Beta Wave 1's changes. Some of the +changes are from baseline StepMania 4 SVN, in order to keep compatibility. + +r126 | 20091130 23:18:28 +------------------------ +* Add improved cel shading for people with GLSL support. [shakesoda] + +r125 | 20091130 18:18:43 +------------------------ +* [Course.cpp] GetPlayMode() and GetCourseType() return actual enums now, + instead of numbers. + +r124 | 20091130 14:45:37 +------------------------ +* [StepMania.cpp] (any)Shift+F2 = reload metrics only. + F2 = reload metrics and textures. + +r123 | 20091129 14:42:34 +------------------------ +* [TimingData] add GetActualBPM() Lua binding that returns a table holding the + min and max BPMs, in that order. + +r122 | 20091127 23:31:32 +------------------------ +* Add OptionsListTimeout [shakesoda] + +r121 | 20091127 15:57:10 +------------------------ +* Disable color keying banners (it's 2009, I don't think anyone is using the + old rotated banners anymore. -aj) [shakesoda] + +r112-r120 | 20091126 17:28:56-22:13:57 (SSC turkey day) +------------------------------------------------------- +* [Song] new Lua bindings: NormallyDisplayed(), GetStepsSeconds() +* Themes will load Lua scripts from subdirectories first now. + +r111 | 20091122 10:21:30 +------------------------ +* [ArchHooks_Unix] Follow user's system language as default. + [David Santamara Rogado (howl)] + See http://www.stepmania.com/forums/showthread.php?t=21471 for more info. + +r110 | 20091120 14:03:17 +------------------------ +* Fixed a crash with lifemultipliers > 1.0 in debug builds + +r109 | 20091117 11:05:29 +------------------------ +* F2 reloads metrics again, just like in StepMania 3.9. (This is probably one + of those changes that won't get backported to baseline StepMania...) +* [ScoreKeeperNormal] version 0.5 of ToastyTriggersAt added; only allows for + one value, unlike 3.9+ (which used a String with multiple values). The final + version will use a Lua table, similar to [MusicWheel] SortOrders. + +r108 | 20091116 02:19:05 +------------------------ +* [CharacterManager] GetAllCharacters() Lua binding added. + +r107 | 20091116 02:03:41 +------------------------ +* [Character] new Lua bindings: GetModelPath(), GetRestAnimationPath(), + GetWarmUpAnimationPath(), GetDanceAnimationPath() +* [CharacterManager] GetRandomCharacter() Lua binding added +* [RageFileManager] GetDirListing(sPath,bOnlyDirs,bPathToo) Lua binding added + +r106 | 20091115 21:33:28 +------------------------ +* Prevent focus lost at Fullscreen on X11, fix windowed->fullscreen resolution + changes so that they save [David Santamara Rogado (howl)] + (http://www.stepmania.com/forums/showthread.php?t=21430) + +r105 | 20091114 15:07:58 +------------------------ +* Add support for .oga and .ogv files. [David Santamara Rogado (howl)] + (http://pastie.org/698741) + +r104 | 20091113 22:13:47 +------------------------ +* Fix a crash in StepsDisplay that allows Course mode to at least run. + +r103 | 20091113 21:23:42 +------------------------ +* sm4svn r28233 [Glenn Maynard]: + "Fix ThemeMetric<EnumType> gives the first value of the enum when the theme + metric is nil, instead of EnumType_INVALID. + This happened because ThemeMetric was setting the value to its default, + eg. EnumType(), when LuaHelpers::FromStack returned false. + This behavior doesn't make sense in the general case, since EnumType() results + in an arbitrary value (the first one) rather than Invalid. Every FromStack + function sets a reasonable default on invalid data, anyway, and only RageColor + and enums can return false in any case. + This fixes CustomDifficulty when CourseType = nil." + +r102 | 20091111 04:00:46 +------------------------ +* MusicWheelItem SetMessage has a new param, Type (string that returns the + item type). +* Add sort songs by most recently played. (As of this writing, it's not + feature-complete yet.) + +r101 | 20091109 19:33:55 +------------------------ +* Implemented David Santamara Rogado (howl)'s patch for loading Splash.png instead of an .xpm +(http://www.stepmania.com/forums/showpost.php?p=157340&postcount=3) + +r089-100 | 20091103 01:45:01 - 20091109 04:01:31 +------------------------------------------------ +Okay let's just say it's r089 to r100 and call it a week. + +* Changes from SM4SVN: + * r28211: [HighScore.cpp] "logic fixup" [Glenn Maynard] + * r28215: "default to showing backgrounds in editor" [Chris Danford] + * r28217: "Fix crash on reload metrics due to faulty FlushDirCache logic." + [Steve Checkoway], implemented along with code that was originally submitted + as r076 but removed. See this fix log to figure out why we'd bother. :) + * r28218: "crash handler is crashing in 2.6.31 in GetBacktrace, causing a + recursive crash handler crash that we aren't handling, leading to recursion" + [Glenn Maynard] + * r28219: "add 'DIRRO' driver for read-only access" [Glenn Maynard] + * r28220: "fix confusing comment. Escaping doesn't affect this; commas aren't + escaped, since they're split from the value itself, long after MsdFile is + loaded." [Glenn Maynard] (We'll be keeping the 1,1,1,1 colors in sm-ssc, and + may provide a compatibility script for SM4SVN, so be on the lookout.) + * r28221: "allow overriding, like PRODUCT_ID" [Glenn Maynard] + * r28222-28223: "adding support for pms files" [GRIM657] + * The pulseaudio patch [David Santamara Rogado (howl), Ondřej Hošek, Damien Thébault] + (see http://www.stepmania.com/forums/showthread.php?t=21348) + * Greg Nadja's OpenGL/Windows patch + +* sm-ssc Changes: + * [ScreenSelectMusic.cpp] Add SelectMenuInputMessage, has params Player and + Button. Broadcast messages when holding select and a button other than Select + is pushed. + * Windowed mode is now the default display mode. + * [HighScore.cpp] new Lua bindings: + * GetModifiers() + * GetTapNoteScore(TapNoteScore) + * GetHoldNoteScore(HoldNoteScore) + * GetRadarValues() + * [ProfileManager.cpp] added IsSongNew(Song) Lua binding + +r088 | 20091101 12:19:47 +------------------------ +* SM4SVN r28203-28208, all by Glenn Maynard. + * r28203: "skip exporting round data when nothing was played (no taps, no holds)" + * r28204: "fix signatures not being written" (we had this already) + * r28205: "don't fail if there's no course; just hide" + * r28206: "move course rename and delete into Overview" + * r28208: "disable rename and delete for courses that havn't been saved yet" +r28207 was a theme edit. + +r087 | 20091029 15:48:06 +------------------------ +sm4svn r28202: helper for cycling through an enum [Glenn Maynard] + +r086 | 20091028 22:20:40 +------------------------ +sm4svn r28201: "refactor RageInput to not call GetDevicesAndDescriptions +constantly; it can be slightly complex and get called thousands of +times a second" [Glenn Maynard] + +r085 | 20091027 18:17:54 +------------------------ +* Allow for Codes on ScreenGameplay. +* New Lua bindings for ScreenGameplay: + * PauseGame(bool) - Pauses/unpauses the game. + * IsPaused() - returns true or false depending on if the game is paused or not. + +r084 | 20091027 04:40:01 +------------------------ +* SM4SVN r28198-28200 + * r28198: Fix GetFileSizeInBytes to return an int instead of unsigned. + "this returns -1 on error (this should actually be 64-bit, + but that's a bigger change)" [Glenn Maynard] + * r28199: The official log is as follows: + "Hack to get the decorations to be deleted. Fixes crashes, + but probably not the best way to go about this." + In addition to doing this, it adds GetChildren() to ActorFrame in the + code itself. (It already existed in Lua, I just felt like pointing + this out. :D) [Steve Checkoway] + * r28200: The official log is as follows: + "Do not use an AutoActor to keep track of the children." + However, this also fixes the hack in r28200. [Steve Checkoway] + +r083 | 20091015 02:52:45 +------------------------ +* Support loading Lua scripts from subdirectories of the Scripts folder, + to allow for better organization. The scripts in the root Scripts folder + will run first, then any Lua scripts in subdirectories of the Scripts folder + will be run. It currently only works with one folder depth, for example: + Scripts/subfolder/script.lua. + + This is not likely to be changed. If you can see a possible need for paths + like Scripts/subfolder/subfolder2/script.lua, please make a Feature Request + ticket on the bugtracker at http://ssc.ajworld.net/sm-ssc/bugtracker/ with + an explanation of what you have in mind. + +r082 | 20091012 02:53:51 +------------------------ +* Change BitmapText defaults to no stroke + no shadow. +* Added DefaultTheme preference in order to fix crashes. + (sm-ssc's fallback theme is _fallback [and therefore normally unselectable].) + +r081 | 20091005 22:13:23 +------------------------ +* [NotesLoaderSM.cpp] Changes based on SM4SVN r28197 [Archer] + +r080 | 20091002 15:56:01 +------------------------ +* Event Mode turned on by default, as it should be. :) + +r079 | 20090925 21:20:49 +------------------------ +* SM4SVN r28192-28196. + * r28192: HexToBinary for RString -> RString. [Glenn Maynard] + * r28193: show all songs in EditCourse, not just preferred songs [Chris Danford] + * r28194: [ScreenDebugOverlay] Glenn made this themeable in SM4SVN, finally + catching up. This means we've had to rename a few things: + * DebugMenuHeader -> HeaderText + * PageName -> PageText + ButtonText and FunctionText were added, as well. + The font names remain the same, only the metrics change. + (Can you believe they're still using Common normal as the font?) + * r28195,28196: fix ComboChanged message sent when m_bSendJudgmentAndComboMessages + is false, fix doing unnecessary work in multiplayer [Glenn Maynard] + +r078 | 20090920 00:43:33 +------------------------ +* [StepsDisplay] Fixed it so it actually shows up again. + +r077 | 20090919 20:31:54 +------------------------ +Happy talk like k//eternal day! +* [Font.cpp] Don't show strokes by default. +* [NoteDisplay] fRotation -> fRotationZ in anticipation of multiple rotation mods. +* [PaneDisplay] changed one thing that used a goto; doesn't use it anymore. seems to work for me, though I'm not 100% sure. +* [ThemeManager] don't reload Lua scripts when you reload the metrics. + This is a temporary fix, and may be deemed safe at some point in the future. + +r076 | 20090914 03:42:25 +------------------------ +* SM4SVN r28190,28191 (25 files worth). This was later reverted, as it caused +reloading the metrics to crash. Since sm-ssc is primarily for themers, this is a +dealbreaker. A lot of things were unofficially added to sm-ssc at this point: + +* [ActorFrame] Added RemoveAllChildren() and RemoveChild(sName) bindings. + These are not guaranteed to work. Don't use them. They are very dangerous. +* [IniFile] added Lua's '--' syntax for commenting (along with '//' and '#', + which were already supported). +* New blend modes Modulate (subject to renaming later) and AlphaMultiply. +* [RageUtil] Added various bindings for formatting time that were already built + into StepMania: SecondsToHHMMSS, SecondsToMMSSMsMs, SecondsToMMSSMsMsMs, + SecondsToMSS, SecondsToMMSS. All bindings take in a float (number of seconds). +* [RageUtil] Added IsHexVal(string) binding. +* Added groups to sort length (based on BPM ranges), so the songs no longer + show up without groups. + +r075 | 20090914 00:41:36 +------------------------ +* SM4SVN r28189. + +r074 | 20090913 12:52:05 +------------------------ +* SM4SVN r28180-28185. + +r073 | 20090913 01:57:12 +------------------------ +* Added WeightedMultiply and InvertDest blend modes to Direct3D. + +r072 | 20090912 17:15:16 +------------------------ +* Change decorations draw order so it breaks things less. + +r071 | 20090911 01:29:41 +------------------------ +* "hidden" removed from Actor commands. It was deprecated. + A compatibility alias was added to replicate its functionality. However, this + will not work with NoteSkins, so be sure to make sure to check them for the + use of hidden. + + Handy replacement guide: + hidden,true / hidden,1 = visible,false + hidden,false / hidden,0 = visible,true + +r070 | 20090907 03:01:22 +------------------------ +* Add Sprite:CropTo() function + Lua binding. + +r069 | 20090906 03:59:10 +------------------------ +* Base theme changed from "default" to "_fallback". + As a result, all themes will fallback on _fallback. + _fallback is more or less the SM4SVN default. + +r068 | 20090905 21:05:17 +------------------------ +* [ScreenWithMenuElements.cpp, ThemeManager.cpp] Load and parse Lua as music. + This makes conditional music possible. + +r067 | 20090905 19:00:37 +------------------------ +* add URLEncode Lua binding to RageUtil. + +r066 | 20090904 14:19:28 +------------------------ +* Change many things on ScreenEdit to go 5 decimal places instead of 3. +* Beginnings of Xbox controller mappings for edit mode (untested) +* [REDACTED] preference renamed to be less specific but more accurate. + +r065 | 20090903 04:21:31 +------------------------ +* Binding naming format changed for BPM bindings. Always uses all caps BPM. + Changes in the codebase due to this: + * [Song] HasSignificantBpmChangesOrStops -> HasSignificantBPMChangesOrStops + * [TimingData] HasBpmChanges -> HasBPMChanges +* [TimingData] New bindings. (GetStops, GetBPMsAndTimes) +* [ScreenPackages] attempt to not call MoveLeft by duplicating code. + Seemed to work okay. + +r064 | 20090831 02:53:36 +------------------------ +* [ActorScroller] Make naming of commands consistent (some were all lowercase, + some were CamelCase), all are now CamelCase. + todo: add aliases in the _fallback theme for compatibility with + regular SM4 themes. + +r063 | 20090831 02:48:44 +------------------------ +ScreenPackages changes: +* Backgrounds from Sprites to AutoActors (Lua can be used now). +* DefaultUrl metric added. + +r062 | 20090829 04:00:16 +------------------------ +* Add metric for determining how to judge jumps: + [Gameplay] LastOrMinimumTapNoteScore + and an enum (TapNoteScoreJudgeType) to go with it. This idea was inspired + by PumpMania (Zmey, et al). + (This commit was later reverted, as it caused crashes.) + +r061 | 20090828 00:29:08 +------------------------ +* Added ScreenGameplay:GetPlayerInfo(PlayerNumber) Lua binding + +r060 | 20090827 03:27:21 +------------------------ +* Added LifeChanged message to LifeMeterBattery, meaning certain hackily-coded + custom life meters by a certain SSC member can work in Oni mode again. ;) +* MAX_EDIT_STEPS_SIZE_BYTES changed from 30KB to 60KB. +* Added --theme= and --language= command line options. + +r059 | 20090826 03:16:45 +------------------------ +* SSE2 build configuration (Visual Studio 2008 project files only). +* new Lua bindings for WheelBase: IsSettled(), IsLocked() + +r058 | 20090822 16:14:18 +------------------------ +* Implement --version command line argument. Prints out the version of sm-ssc. + Please build sm-ssc with HAVE_VERSION_TIME if possible. Untested on Linux/Mac. + +r057 | 20090822 03:21:14 +------------------------ +* add beginner meter sort + +r056 | 20090821 00:19:23 +------------------------ +* SM4SVN r28172-28174. + +r055 | 20090810 14:48:34 +------------------------ +* [GameCommand.cpp] add GetUrl() Lua binding. +* [GameManager.cpp] add IsGameEnabled(Game) Lua binding. +* removing player color diffuse commands, in the hopes this can be replicated + using Lua commands. + [GrooveRadar.cpp, ScoreDisplayLifeTime.cpp, ScreenSelectMusic.cpp] +* [CommandLineActions] Version() stub; when implemented, should print out + version number and quit. +* [GrooveRadar] name m_GrooveRadarValueMap "RadarValueMap(P1/P2)" + (commands untested); new todo note in header file +* [ScoreDisplayOni.cpp] give it a name ("ScoreDisplayOni Numbers") and run + commands. (untested) +* various pedantic edits, maybe some commenting + [Actor.cpp, GameCommand.cpp, MusicWheel.cpp, NotesLoaderBMS.cpp, + ScreenSelect.cpp] + +r054 | 20090810 14:36:10 +------------------------ +* SM4SVN r28170 (vdl's fixes for Xbox building; he says they should be tested.) + +r053 | 20090815 07:18:10 +------------------------ +* add GetPathO() Lua binding + +r052 | 20090810 12:09:00 +------------------------ +* SM4SVN r28140-r28166 (code changes only) + +r051 | 20090808 03:11:39 +------------------------ +* SM4SVN r28135, r28137, r28138 +* Lossless screenshots now save as PNG. +* Conversion of decorations to not be children of the screen; they load in + a similar fashion to overlay/underlay, but still using LoadB so everything + works correctly. (Tested against SM4 default theme for compatibility.) + +r050 | 20090729 22:57:52 +------------------------ +* add GetRotationX, GetRotationZ commands to Actor +* add urlnoexit game command, which won't exit upon loading the browser. +* add OldHealthState to HealthStateChanged message on ScreenGameplay + +r049 | 2009072? ??:??:?? +------------------------ +* [REDACTED] + +r048 | 20090726 18:36:41 +------------------------ +* (untested) GrooveRadar plays commands on the frame now, +allowing for customized in and out transitions, using the +TweenOnScreen/TweenOffScreen Commands. +* add PlayerController enum binding +* add PlayerState:GetPlayerController() [untested] + +r047 | 20090725 20:30:19 +------------------------ +ScreenDebugOverlay changes: +* add OnCommand, X, Y to Debug Header +* add GainFocus/LoseFocus commands to page names +* add LineOnColor/LineOffColor + +r046 | 20090724 00:55:11 +------------------------ +* Fix default stroke color and shadow length. (BitmapText) + +r045 | 20090724 00:55:11 +------------------------ +* Add StartRoulette and StartRandom messages to MusicWheel. + +r044 | 20090719 12:45:55 +------------------------ +* Add SetPref to GameCommands. + +r043 | 20090719 01:10:30 +------------------------ +* patch by theDtTvB: http://share11.appspot.com/20421 +(some parts relating to Player.cpp later reverted) + +r042 | 20090718 15:16:42 +------------------------ +* Add conf,PercentageScoring. + +r041 | 20090718 14:53:25 +------------------------ +Add more internal font mappings: +* auxc +* auxd +* auxz +* auxwhite +* auxblack +* auxlb +* auxrb +* auxlt +* auxrt + +r040 | 20090718 12:56:46 +------------------------ +New ThemeManager Lua bindings: +* GetCurrentThemeDirectory +* ReloadMetrics + +r039 | 20090712 14:56:36 +------------------------ +* ActorScroller: add GetNumItems binding. +* ThemeManager: add bindings for GetThemeDisplayName() and + GetThemeDisplayAuthor() (for the current theme only). +* Refreshing the metrics now also refreshes the Scripts directory. + This may cause a problem for certain scripts. + +r038 | 20090711 02:07:19 +------------------------ +* Add GAMESTATE:IsBattleMode() binding. + +r037 | 20090711 01:37:29 +------------------------ +* "smoke this joint" patch: Fixes songs with only Edit steps from crashing. + (like Slam This Joint, hence the name of this patch) +* Lights fix from ??? + +r036 | 20090708 11:47:22 +------------------------ +* (sync with SM4SVN: LightsManager.cpp, ScreenGameplay.cpp) + +r035 | 20090707 02:42:22 +------------------------ +* Add GetProfileDir() binding to ProfileManager. +* Added ProfileSlotNames enum. +* Add broadcasted message "SongChosen" on ScreenSelectMusic. + +r034 | 20090626 20:50:00 +------------------------ +* Allow meters to go up to 20 in Edit Mode. + +r033 | 20090623 13:59:38 +------------------------ +* Added io, os, and packages to Lua bindings. Some of these are dangerous. + Don't use them. + +* Fix instance in ScreenSelectMaster where hitting Up wouldn't count as going + backwards. + +r032 | 20090617 20:42:44 +------------------------ +* Add Overlay shader. + +r031 | 20090615 18:38:22 +------------------------ +* Add bindings to Song: + * GetMusicPath + * GetCDTitlePath + * GetLyricsPath + * IsEnabled + * HasStepsType + * HasMusic + * HasBanner + * HasBackground + * HasCDTitle + * HasBGChanges + * HasLyrics + * GetBPMAtBeat + * GetBeatFromElapsedTime + * GetElapsedTimeFromBeat + * HasSignificantBpmChangesOrStops + * HasEdits + * IsEasy +* Add bindings to Steps: + * IsAnEdit + * IsAPlayerEdit + * GetHash + * disabled stub for GetSMNoteData (untested) + +r030 | 20090615 17:27:52 +------------------------ +* (sync with SM4SVN) + +r029 | 20090615 16:27:53 +------------------------ +More Lua bindings: +* PlayerStageStats:FullComboOfScore(tns) +* RageFileManager is now accessible through FILEMAN with these bindings: + * FILEMAN:DoesFileExist(path) + * FILEMAN:GetHashForFile(path) +* Song:GetSongFilePath() + +r028 | 20090612 19:05:05 +------------------------ +* Work-in-progress bindings for ActorSound: + * pause + * stop +* Work-in-progress bindings for RageSound: + * volume + * SetStopMode + +r027 | 20090529 16:55:44 +------------------------ +(sync with SM4SVN: Archer adding 5:4 support) + +r026 | 20090527 23:53:45 +------------------------ +Add three new Lua bindings to RageFile: +* GetError +* ClearError +* AtEOF + +r025 | 20090525 02:25:51 +------------------------ +* Actor.cpp: add GetDiffuse() Lua binding +* (sync with SM4SVN: Player.cpp) + +r024 | 20090523 17:06:33-20090524 13:06:42 +------------------------------------------ +* (sync with SM4SVN) + +r023 | 20090523 00:58:16 +------------------------ +* Add glowramp to Actor +* (more changes from SM4SVN) + +r022 | 20090519 21:27:16 +------------------------ +* Soft shuffle stub. + +r021 | 20090518 17:50:49 +------------------------ +* (changes from SM4SVN: Frieza and Wolfman [OnlyPreferredDifficulties]) + +r020 | 20090517 20:11:19 +------------------------ +Add more internal font mappings: +* auxa +* auxb +* auxy +* auxl +* auxr + +r019 | 20090517 19:12:31 +------------------------ +New RageFile bindings: +* Seek +* Tell + +r018 | 20090513 04:44:00 +------------------------ +ActorScroller changes: +* Can now actually set size of the mask with SetMask +* Add more Lua bindings: + * SetNumItemsToDraw + * GetFullScrollLengthSeconds + * GetCurrentItem + * GetDestinationItem + +r017 | 20090509 12:52:13 +------------------------ +Add skewy to valid Actor commands. + +r016 | 20090505 14:08:09 +------------------------ +(SM4SVN r28060, r28060) + +r015 | 20090505 12:09:54 +------------------------ +(changes from SM4SVN: ComboMultiplier by Frieza in ScoreKeeperNormal) + +r014 | 20090502 21:31:13 +------------------------ +Add bindings to Song: +* GetDisplaySubTitle +* GetTranslitSubTitle + +r013 | 20090502 16:10:05 +------------------------ +Add GetThemeAuthor() to ThemeManager. + +r012 | 20090502 14:51:38 +------------------------ +(changes from SM4SVN: ScreenSelect* changes by Frieza) + +r011 | 20090502 02:54:54 +------------------------ +* Housekeeping. +* Add more Lua bindings to PlayerStageStats: + * GetCurrentMissCombo + * GetCurrentPossibleDancePoints + * GetAliveSeconds + +r010 | 20090502 02:26:43 +------------------------ +add MD5 String/File and SHA1 String hashing via Lua: +* CRYPTMAN:MD5String(str) +* CRYPTMAN:MD5File(path) +* CRYPTMAN:SHA1String(str) + +r009 | 20090502 02:25:46 +------------------------ +Add GetText() binding to BPMDisplay. + +r008 | 20090502 02:25:28 +------------------------ +Add GetServerName() binding to NetworkSyncManager. + +r007 | 20090502 01:58:19 +------------------------ +Make ScreenDebugOverlay use its own fonts: +* ScreenDebugOverlay header +* ScreenDebugOverlay page +* ScreenDebugOverlay line + +r006 | 20090501 20:01:52 +------------------------ +(changes from SM4SVN: tons of changes by Frieza) + +r005 | 20090425 16:17:39 +------------------------ +(changes from SM4SVN: GameManager.cpp, RollingNumbers.cpp) + +r004 | 20090419 00:37:05 +------------------------ +Add new Lua bindings to TimingData: +* HasBpmChanges +* GetBpms (untested) +* GetStops (untested) + +r003 | 20090419 00:15:04 +------------------------ +Make changes to a number of files making the crash explanations more detailed: +* Actor.cpp - PercentThroughEffect, PercentBetweenColors, DeltaTime +* Attack.cpp +* GameManager.cpp +* GameState.cpp +* InputFilter.cpp +* NoteData.cpp + +r002 | 20090418 23:54:23 +------------------------ +* Remove ScreenEz2SelectPlayer, which only the Xbox project still referenced. + +r001 | 20090418 22:51:30 +------------------------ +Initial commit. +_____________________________________________________________________________ +Footnotes: +* The actual revision numbers are different for various reasons. + +1) Currently, sm-ssc is being held in the general purpose SSC SVN repository, +which includes other projects, such as themes and non-StepMania related items. +What's called r001 in this changelog is actually r285 of the SSC SVN repo. +r107 in the changelog is r1146 in the SSC SVN repo, just to give you an idea +of something more recent. + +2) Other projects are being developed within sm-ssc (as demonstrations of some +of the more advanced things you can do with the platform) and are best served +living within the repository for the time being. + +3) The commit logs in here are distilled over the reality of our commits. +This is done for a few reasons. The first is that some changes span multiple +commits... let's compare what the changelog says is r106 with the actual +commits in a similar format to the changelog. Everything you see after the +dashes is the actual uncut and unchanged commit log messages. Commit numbers +use the actual SSC SVN revisions. + +r1136 | 20091115 20:43:48 +[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp] +------------------------- +howl did it +http://www.stepmania.com/forums/showthread.php?p=157603#post157603 + +r1137 | 20091115 21:05:36 +[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp] +------------------------- +howl's additions to his patch + +r1138 | 20091115 21:26:50 +[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp] +------------------------- +another update to howl's patch + +r1138 | 20091115 21:33:28 +[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp] +------------------------- +i bet howl updates it yet again + +================================================================== +For the most part, the commit logs that the sm-ssc devs (AJ, Midiman, and +shakesoda) enter aren't always the most descriptive. Some of them are also +not really safe for viewing. :s + +Plus, the rewrites let us expand on what was originally written in the commit +log, and/or edit it for better readability. + +(Also let it be said that those logs aren't the norm for commits. The ones +I end up doing are similar to what ends up in the changelog, mainly for my own +convienence.) \ No newline at end of file diff --git a/Docs/open.gif b/Docs/open.gif deleted file mode 100644 index b4687ec592..0000000000 Binary files a/Docs/open.gif and /dev/null differ diff --git a/Docs/opensource_simulators.txt b/Docs/opensource_simulators.txt new file mode 100644 index 0000000000..a278940e2b --- /dev/null +++ b/Docs/opensource_simulators.txt @@ -0,0 +1,14 @@ +Some other rhythm game simulators are open source. +Here's where to find code. +-------------------------------------------------------------------------------- +Delight Delight Reduplication [Boost Software License] +http://sourceforge.jp/projects/delight/svn/view/trunk/src/?root=delight + +Direct Move [unknown license] +http://zsoo.net/38 + +pydance [see http://kai.vm.bytemark.co.uk/svn/pydance/trunk/pydance/LICENSE] +http://kai.vm.bytemark.co.uk/svn/pydance/trunk/pydance/ + +be-pachi music [MIT license] +http://x-raise.cjb.net/bpm.html \ No newline at end of file diff --git a/Docs/possible memory leaks.txt b/Docs/possible memory leaks.txt new file mode 100644 index 0000000000..18a81c2999 --- /dev/null +++ b/Docs/possible memory leaks.txt @@ -0,0 +1,38 @@ +as found by cppcheck against normal sm4svn source (as of 20090527), so +line numbers will be different in sm-ssc for some of these. +================================================================================== +[.\ActorFrameTexture.h:38]: (all) Memory leak: ActorFrameTexture::m_pRenderTarget + +[.\AdjustSync.h:16]: (all) Memory leak: AdjustSync::s_pTimingDataOriginal + +[.\AutoKeysounds.h:32]: (all) Memory leak: AutoKeysounds::m_pSharedSound + +[.\Font.cpp:748]: (all) Memory leak: pPage + +[.\GameSoundManager.cpp:267]: (all) Memory leak: pSound + +[.\LifeMeterTime.h:40]: (all) Memory leak: LifeMeterTime::m_pStream + +[.\MusicWheelItem.h:55]: (all) Memory leak: MusicWheelItem::m_pTextSectionCount + +[.\OptionRow.h:131]: (all) Memory leak: OptionRow::m_textTitle + +[.\PitchDetectionTestUtil.cpp:928]: (error) Mismatching allocation and deallocation: inarray +[.\PitchDetectionTestUtil.cpp:968]: (error) Mismatching allocation and deallocation: a + +[.\RageFile.cpp:377]: (all) Memory leak: pFile + +[.\RageFileDriverDeflate.cpp:533]: (all) Memory leak: mem + +[.\RageSoundReader_ChannelSplit.h:57]: (all) Memory leak: RageSoundSplitter::m_pImpl + +[.\RageSoundReader_PitchChange.h:25]: (all) Memory leak: RageSoundReader_PitchChange::m_pSpeedChange +[.\RageSoundReader_PitchChange.h:26]: (all) Memory leak: RageSoundReader_PitchChange::m_pResample + +[.\RageThreads.cpp:141]: (all) Memory leak: pLock + +[.\archutils\Unix\CrashHandlerChild.cpp:290]: (error) Resource leak: tty + +[.\crypto\CryptRSA.cpp:447]: (error) Memory leak: rsa + +[.\smpackage\ZipArchive\Linux\ZipPlatform.cpp:87]: (style) Found 'mktemp'. You should use 'mkstemp' instead \ No newline at end of file diff --git a/Docs/rivaldata.txt b/Docs/rivaldata.txt new file mode 100644 index 0000000000..5e1732ff9e --- /dev/null +++ b/Docs/rivaldata.txt @@ -0,0 +1,80 @@ +okay what we should probabably do for rival data is fuck up stats somehow. + +Here's what rival data should have, taken from Stats.xml + +==GeneralData== +This section holds very BASIC identifying and general information. + +<GeneralData> + <DisplayName>AJ</DisplayName> + <Guid>5ece7871bd060600</Guid> + <LastPlayedMachineGuid>faeae5b0da56509c</LastPlayedMachineGuid> + <LastPlayedDate>2008-07-06</LastPlayedDate> +</GeneralData> + +==SongScores== +Where song scores are held. Each song has its own entry in here. + +<Song Dir='Songs/Dance Dance Revolution 6th Mix -Max-/Do It Right/'> + <Steps Difficulty='Hard' StepsType='dance-single'> + <HighScoreList> + <NumTimesPlayed>2</NumTimesPlayed> + <LastPlayed>2008-02-08</LastPlayed> + <HighGrade>Tier02</HighGrade> + + <HighScore> + <Grade>Tier02</Grade> + <PercentDP>0.952000</PercentDP> + <Modifiers>3x, Overhead, delta</Modifiers> + <DateTime>2008-02-08 17:12:08</DateTime> + <PlayerGuid>5ece7871bd060600</PlayerGuid> + <MachineGuid>faeae5b0da56509c</MachineGuid> + + <TapNoteScores> + <HitMine>0</HitMine> + <AvoidMine>0</AvoidMine> + <CheckpointMiss>0</CheckpointMiss> + <Miss>0</Miss> + <W5>0</W5> + <W4>0</W4> + <W3>0</W3> + <W2>41</W2> + <W1>244</W1> + <CheckpointHit>0</CheckpointHit> + </TapNoteScores> + + <HoldNoteScores> + <LetGo>0</LetGo> + <Held>0</Held> + </HoldNoteScores> + </HighScore> + + <HighScore> + <Grade>Tier03</Grade> + <PercentDP>0.942600</PercentDP> + <Modifiers>3x, delta</Modifiers> + <DateTime>2008-02-08 17:08:17</DateTime> + <PlayerGuid>5ece7871bd060600</PlayerGuid> + <MachineGuid>faeae5b0da56509c</MachineGuid> + + <TapNoteScores> + <HitMine>0</HitMine> + <AvoidMine>0</AvoidMine> + <CheckpointMiss>0</CheckpointMiss> + <Miss>0</Miss> + <W5>0</W5> + <W4>1</W4> + <W3>0</W3> + <W2>46</W2> + <W1>238</W1> + <CheckpointHit>0</CheckpointHit> + </TapNoteScores> + + <HoldNoteScores> + <LetGo>0</LetGo> + <Held>0</Held> + </HoldNoteScores> + </HighScore> + </HighScoreList> + </Steps> +</Song> \ No newline at end of file diff --git a/Docs/steps.lua b/Docs/steps.lua new file mode 100644 index 0000000000..8a5659f0b3 --- /dev/null +++ b/Docs/steps.lua @@ -0,0 +1,192 @@ +-- steps.lua: rough rough draft. Please don't use until finalized. +-- ver 20100116 + +-- shakesoda is going to be making this more generic for use in rhythm. + +local MetaTags = { + Title = {"Dyamite Rave","(transliteration)"}, + Subtitle = {"Down Bird Sota Mix","(transliteration)"}, + Artist = {"NAOKI","(transliteration)"}, + Genre = {"Scouse House","(transliteration)"}, + License = "CC-BY-NC", + URL = "http://shakesoda.org/" +} + +--[[ + If an int is used in a field that expects a time of some sort, it is + assumed to use beats. If it's a float, it assumes seconds instead. +]] + +local CacheData { + HasAttacks = true, + HasBanner = true, + HasBackground = true, + HasKeysounds = true, + HasLyrics = true, + HasMusic = true, + SongFileNames = "path/from/song/folder", + LongestChartLength = 220.000 +} + +local MetaData = { + Attacks = { + -- start = length, startup time, mod string + 0 = { 10, 1.0, "mod,50% reverse" }, + 10 = { 5, 1.0, "mod,70% boost" } + }, + BannerPath = { "banner.png" }, -- can be an image, video, or lua + Background = { -- background changes. + Path = "background.png", + Animation = { -- can have as many changes as needed + --[[ + startTime = { path, rate, offset, commands } + Any ommitted arguments will default to nil, except for rate, which would use 1.0 + ]] + 0 = {"path/to/bga", 1.0, 0.000, 0, cmd(rainbow) }, + 0 = {"path/to/bga2", 1.0, 0.000, 0, cmd(thump) } + }, + }, + --[[ + -- #BGCHANGES2:32.000=flash=1.000=0=0=1=====, + BackgroundChanges2 = { + 32.000 = { "flash", 1.000, 0, 0, 1, [unk], [unk], [unk], [unk], [unk] }; + }, + ]] + BPMs = { 0.000 = 280.000 }, + CDTitle = "", + DisplayBPM = { 150, 300 }, -- can be either an array of two values to cycle or 'Random' + FormatRevision = 1, + InstrumentTracks = { + -- todo: account for dj-hero style crossfading for an arbitrary amount of tracks (at least two) + InstrumentTrack_Guitar = "guitar.ogg", + InstrumentTrack_Rhythm = "rhythm.ogg", + InstrumentTrack_Bass = "bass.ogg" + }, + Keysounds = {}, -- I forget exactly how the SM format does this, but it'll be similar here. + LeadOut = 3, + LyricsPath = "Dynamite Rave.lrc", + Offset = 0.014, + Overlay = {}, -- same as Background, but without path. + PreviewMusic = { 50.000, 60.000 }, + Selectable = true, + Stops = { 156.000 = 0.540 }, + TimeSignatures = { 0.000 = "4/4" } +} + +local NoteCharts = { + { + ChartRevison = 20, + BPMs = { 0.000 = 140.000 }, -- override + Description = "Z. Nard", -- usually the chart author or "Copied from *" + Difficulty = 'Difficulty_Hard', + Meter = '100', -- value clamped between 1 and 100, scaled to whatever works theme-side. + RadarValues = { + -- may not be 100%; won't be commented/linebroken in actual file + 0.931, -- Stream (0..1) + 1.000, -- Voltage (0..1) + 0.439, -- Air (0..1) + 0.174, -- Freeze (0..1) + 0.156, -- Chaos (0..1) + }, + -- taps and holds, jumps, holds, mines, hands, rolls + Stats = { 645, 48, 19, 3, 0, 0 }, + StepsType = 'StepsType_Dance_Single', + Stops = { 140.000 = 0.860 }, -- override + TimeSignatures = { 0.000 = "4/4" }, -- override + NoteData = { + { -- measure 1 + -- row level + --{ column level }, works like this: + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,1 = { SomeFunction(), 'TNS_GreaterThan', 'TapNoteScore_W5' } } -- example of assigning a function to a note. + }, + { -- measure 2 + -- row level + --{ column level } or in other words + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,0 } + } + } + }, + -- second example chart + { + ChartRevison = 5, + BPMs = { 0.000 = 140.000 }, -- override + Description = "B. McLargeHuge", -- usually the chart author or "Copied from *" + Difficulty = 'Difficulty_Expert', + Meter = '60', + RadarValues = { + -- may not be 100%; won't be commented/linebroken in actual file + 0.931, -- Stream (0..1) + 1.000, -- Voltage (0..1) + 0.439, -- Air (0..1) + 0.174, -- Freeze (0..1) + 0.156, -- Chaos (0..1) + }, + -- taps and holds, jumps, holds, mines, hands, rolls + Stats = { 16, 0, 0, 16, 0, 0 }, + StepsType = 'StepsType_Dance_Single', + -- usually last + NoteData = { + { { 1,0,0,0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,0,0,'m' }, }, + { { 0,1,0,0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,0,'m',0 }, }, + { { 0,0,1,0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,'m',0,0 }, }, + { { 0,0,0,1 }, { 0,0,0,0 }, { 0,0,0,0 }, { 'm',0,0,0 }, }, + { { 0,0,0,0 }, { 1,0,0,0 }, { 0,0,0,'m' }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,1,0,0 }, { 0,0,'m',0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,0,1,0 }, { 0,'m',0,0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,0,0,1 }, { 'm',0,0,0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,0,0,'m' }, { 1,0,0,0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,0,'m',0 }, { 0,1,0,0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 0,'m',0,0 }, { 0,0,1,0 }, { 0,0,0,0 }, }, + { { 0,0,0,0 }, { 'm',0,0,0 }, { 0,0,0,1 }, { 0,0,0,0 }, }, + { { 0,0,0,'m' }, { 0,0,0,0 }, { 0,0,0,0 }, { 1,0,0,0 }, }, + { { 0,0,'m',0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,1,0,0 }, }, + { { 0,'m',0,0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,0,1,0 }, }, + { { 'm',0,0,0 }, { 0,0,0,0 }, { 0,0,0,0 }, { 0,0,0,1 }, } + } + } +} + +local EditCharts = { + { + -- todo: uh..... (this is the internal version of the edits.) + -- should be like NoteData but with fewer available overrides. + } +} + +-- this is a work in progress format. expect things to change as better ideas come about. +-- this isn't how steps currently work internally. that can be dealt with. + +--[[ + Below is a minimal example file. + Just about every value that can be calculated or defaulted to something + reasonable has been omitted, and much extra whitespace reduced. +]] +MetaTags = { + Title = {"Black Lawn Finale", "long wait FINALLY"}, + Artist = {"The Flashbulb", "teh falshbald"} +} +MetaData = { + BannerPath = { "banner.png" }, + Background = { Path = "background.png" }, + BPMs = { 0.000 = 280.000 }, + FormatRevision = 1, + Offset = 0.028 +} +NoteCharts = { + { + Description = "S. Slabrock", + Difficulty = 'Difficulty_Medium', + Meter = '50', + StepsType = 'StepsType_Dance_Single', + NoteData = { + {{0,0,0,0},{0,0,1,0},{0,0,0,0},{0,0,0,1}}, -- measure of 4ths + {{0,1,0,0},{0,0,0,0},{0,1,0,0},{0,0,0,1},{0,0,0,0},{0,0,0,1},{0,0,0,0},{0,0,0,1}} -- measure of 8ths + } + } +} \ No newline at end of file diff --git a/Docs/versioning.txt b/Docs/versioning.txt new file mode 100644 index 0000000000..ac5f679065 --- /dev/null +++ b/Docs/versioning.txt @@ -0,0 +1,12 @@ +[as taken from src/ProductInfo.h] + +Version info displayed to the user. + +These are the 'official' version designations: + * "experimental: pre-release versions + * "private beta v0.0": hmm, think about it for a second there. + ==Public versions below this line== + * "v0.0 alpha #": Alpha versions (bug squashing, polishing until we reach beta) + * "v0.0 beta #": Beta versions (bug squashing, _focus_ is on high priority bugs) + * "v0.0 rc#": Release Candidates (if there are no problems, move on to final) + * "v0.0": Final Releases \ No newline at end of file diff --git a/Installer/custom.ini b/Installer/custom.ini index 840b11d4f9..1c195cf19e 100644 --- a/Installer/custom.ini +++ b/Installer/custom.ini @@ -1,47 +1,47 @@ -[Settings] -NumFields=5 - -[Field 1] -Type=Button -Flags=NOTIFY -Text=&Install -Left=160 -Right=-10 -Top=50 -Bottom=70 - -[Field 2] -Type=Button -Flags=NOTIFY -Text=&Play -Left=160 -Right=-10 -Top=30 -Bottom=50 - -[Field 3] -Type=Button -Flags=NOTIFY -Text=&Re-Install -Left=160 -Right=-10 -Top=60 -Bottom=80 - -[Field 4] -Type=Link -Text=http://www.urlhere.com -State=http://www.urlhere.com -Left=160 -Right=-10 -Top=130 -Bottom=140 - -[Field 5] -Type=Bitmap -Text=custom.bmp -Flags=TRANSPARENT -Left=0 -Right=150 -Top=0 +[Settings] +NumFields=5 + +[Field 1] +Type=Button +Flags=NOTIFY +Text=&Install +Left=160 +Right=-10 +Top=50 +Bottom=70 + +[Field 2] +Type=Button +Flags=NOTIFY +Text=&Play +Left=160 +Right=-10 +Top=30 +Bottom=50 + +[Field 3] +Type=Button +Flags=NOTIFY +Text=&Re-Install +Left=160 +Right=-10 +Top=60 +Bottom=80 + +[Field 4] +Type=Link +Text=http://www.urlhere.com +State=http://www.urlhere.com +Left=160 +Right=-10 +Top=130 +Bottom=140 + +[Field 5] +Type=Bitmap +Text=custom.bmp +Flags=TRANSPARENT +Left=0 +Right=150 +Top=0 Bottom=120 \ No newline at end of file diff --git a/Makefile.am b/Makefile.am index 794cf6560c..8e78419726 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,35 +1,35 @@ -## Need 1.7 for subdir support. (Well, 1.4 doesn't work, I don't know if anything between does.) -AUTOMAKE_OPTIONS = 1.7 foreign -SUBDIRS = src -ACLOCAL_AMFLAGS = -I autoconf/m4 - -## Black magic (read: sed) for getting the product ID as defined in code, not by the autotools. -## Quotes are making vim's highlighting of this even worse, so just escape everything, -## including the escapes. Make it lowercase to match ArchHooks::MountInitialFileSystems(). -productID := $(shell sed -nr /define\\s+PRODUCT_ID_BARE/\{s/.*define\\s+PRODUCT_ID_BARE\\s+\(.+\)/\\1/\;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/\;p\;q\} $(srcdir)/src/ProductInfo.h) - -installFiles = src/stepmania -if HAVE_GTK -installFiles += src/GtkModule.so -endif - -.PHONY: SMData -SMData: - $(srcdir)/Utils/CreatePackage.pl $(srcdir) . - -dist-hook: SMData - mkdir -p $(distdir)/Packages - cp StepMania.smzip $(distdir)/Packages - mkdir -p $(distdir)/Docs - cp $(srcdir)/Docs/Licenses.txt $(distdir)/Docs - cp $(srcdir)/Utils/build.sh $(distdir) - -install-data-hook: $(top_srcdir)/Packages/StepMania.smzip - mkdir -p "$(DESTDIR)$(bindir)/$(productID)/Packages" - $(INSTALL) $(installFiles) "$(DESTDIR)$(bindir)/$(productID)" - $(INSTALL_DATA) $(top_srcdir)/Packages/StepMania.smzip "$(DESTDIR)$(bindir)/$(productID)/Packages" - -uninstall-hook: - rm -f "$(DESTDIR)$(bindir)/$(productID)/stepmania" - rm -f "$(DESTDIR)$(bindir)/$(productID)/GtkModule.so" - rm -f "$(DESTDIR)$(bindir)/$(productID)/Packages/StepMania.smzip" +## Need 1.7 for subdir support. (Well, 1.4 doesn't work, I don't know if anything between does.) +AUTOMAKE_OPTIONS = 1.7 foreign +SUBDIRS = src +ACLOCAL_AMFLAGS = -I autoconf/m4 + +## Black magic (read: sed) for getting the product ID as defined in code, not by the autotools. +## Quotes are making vim's highlighting of this even worse, so just escape everything, +## including the escapes. Make it lowercase to match ArchHooks::MountInitialFileSystems(). +productID := $(shell sed -nr /define\\s+PRODUCT_ID_BARE/\{s/.*define\\s+PRODUCT_ID_BARE\\s+\(.+\)/\\1/\;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/\;p\;q\} $(srcdir)/src/ProductInfo.h) + +installFiles = src/stepmania +if HAVE_GTK +installFiles += src/GtkModule.so +endif + +.PHONY: SMData +SMData: + $(srcdir)/Utils/CreatePackage.pl $(srcdir) . + +dist-hook: SMData + mkdir -p $(distdir)/Packages + cp GameData.smzip $(distdir)/Packages + mkdir -p $(distdir)/Docs + cp $(srcdir)/Docs/Licenses.txt $(distdir)/Docs + cp $(srcdir)/Utils/build.sh $(distdir) + +install-data-hook: $(top_srcdir)/Packages/GameData.smzip + mkdir -p "$(DESTDIR)$(bindir)/$(productID)/Packages" + $(INSTALL) $(installFiles) "$(DESTDIR)$(bindir)/$(productID)" + $(INSTALL_DATA) $(top_srcdir)/Packages/GameData.smzip "$(DESTDIR)$(bindir)/$(productID)/Packages" + +uninstall-hook: + rm -f "$(DESTDIR)$(bindir)/$(productID)/stepmania" + rm -f "$(DESTDIR)$(bindir)/$(productID)/GtkModule.so" + rm -f "$(DESTDIR)$(bindir)/$(productID)/Packages/GameData.smzip" diff --git a/Manual/data/logo.png b/Manual/data/logo.png new file mode 100644 index 0000000000..bdb0e5dc84 Binary files /dev/null and b/Manual/data/logo.png differ diff --git a/Manual/data/style.css b/Manual/data/style.css new file mode 100644 index 0000000000..c1c4fc2344 --- /dev/null +++ b/Manual/data/style.css @@ -0,0 +1,99 @@ +/* reset css v1.0 | 20080212 from http://meyerweb.com/eric/tools/css/reset/ */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { + line-height: 1; + margin: 0.1em; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} +/** end reset css *************************************************************/ + +a:hover{ + color: #F80; +} + +ins { + background-color: #0A0; + color: #FFF; + padding: 0.05em; +} + +#tocDiv{ + width:90%; + margin-left: auto; + margin-right: auto; + background-color: #DDD; + padding: 0.25em; + border-radius: 0.5em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; +} + +#pretocList{ + list-style: lower-roman outside; + padding: 0 0 0 35px; +} + +ol{ + list-style: decimal outside; +} + +ul{ + list-style-type: disc; +} + +ol.tocList{ + padding: 0 0 0 35px; +} + +#logoDiv{ + width:100%; + margin-left:auto; + margin-right:auto; + text-align:center; +} \ No newline at end of file diff --git a/Manual/index.html b/Manual/index.html index 7ececf5052..50e5cbc3f0 100644 --- a/Manual/index.html +++ b/Manual/index.html @@ -1,8 +1,67 @@ -<html> - <head> - </head> - <body> - <h1>StepMania</h1> - See the <a href="http://www.stepmania.com">StepMania web site</a> for more information. - </body> -</html> +<html> +<head> +<title>sm-ssc Manual + + + +
+

sm-ssc:
The Manual

+
+
+ + +
+ +

Introduction

+

This is the basic player manual. We should also link to the Beginner's Guide and +Themer's Guide from here as well.

+ +
+ +

Welcome to sm-ssc

+ +

System Requirements

+

sm-ssc can run on this bare minimum:

+
    +
  • Operating System(s): +
      +
    • Windows (2000, XP, Vista, Windows 7)
    • +
    • Mac OS X (10.?)
    • +
    • *NIX/POSIX-compliant OS (GNU/Linux, *BSD)
    • +
    • Microsoft Xbox
    • +
    +
  • +
+ +

However, we highly recommend at least these settings for decent performance:

+ +

Installation

+

If you're reading this, you've likely already figured out how to install sm-ssc. +Just in case you're reading this without having installed it yourself, however, +here are the installation instructions for various operating systems.

+ +

Windows

+

I hate Vista and Windows 7

+ +

Mac OS X

+

I hate Steve Jobs and hipsters

+ +

Linux

+

I hate dhdarka and people who complain about binary blob drivers

+
+