Initial commit.

This commit is contained in:
AJ Kelly
2010-01-26 21:00:30 -06:00
parent 80057f53cd
commit 3e51544930
4074 changed files with 588945 additions and 543956 deletions
+1 -2
View File
@@ -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);
}
+1 -2
View File
@@ -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);
}
+16
View File
@@ -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;
+1 -1
View File
@@ -1,4 +1,4 @@
DWI-style CDTiltes can be placed here.
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
+21
View File
@@ -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?
+3 -3
View File
@@ -2,9 +2,9 @@
Level1Attack1=1.5x
Level1Attack2=hidden
Level1Attack3=reverse
Level2Attack1=2x
Level2Attack1=dizzy
Level2Attack2=sudden
Level2Attack3=expand
Level3Attack1=3x
Level3Attack2=boost
Level3Attack1=0.5x
Level3Attack2=drunk
Level3Attack3=brake
Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

@@ -1,6 +1,5 @@
#COURSE:Players Best 1-4;
#COURSE:Most Played 01-04;
#SONG:BEST1:Medium;
#SONG:BEST2:Medium;
#SONG:BEST3:Medium;
#SONG:BEST4:Medium;
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@@ -1,4 +1,4 @@
#COURSE:Players Best 5-8;
#COURSE:Most Played 05-08;
#SONG:BEST5:Medium;
#SONG:BEST6:Medium;
#SONG:BEST7:Medium;
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@@ -1,4 +1,4 @@
#COURSE:Players Best 9-12;
#COURSE:Most Played 09-12;
#SONG:BEST9:Medium;
#SONG:BEST10:Medium;
#SONG:BEST11:Medium;
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@@ -1,4 +1,4 @@
#COURSE:Players Best 13-16;
#COURSE:Most Played 13-16;
#SONG:BEST13:Medium;
#SONG:BEST14:Medium;
#SONG:BEST15:Medium;
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

-7
View File
@@ -1,7 +0,0 @@
#COURSE:All Challenge;
#LIVES:4;
#SONG:*:CHALLENGE;
#SONG:*:CHALLENGE;
#SONG:*:CHALLENGE;
#SONG:*:CHALLENGE;
#SONG:*:CHALLENGE;
-5
View File
@@ -1,5 +0,0 @@
#COURSE:All Music Random;
#SONG:*:Medium:;
#SONG:*:Medium:;
#SONG:*:Medium:;
#SONG:*:Medium:;
-10
View File
@@ -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;
-5
View File
@@ -1,5 +0,0 @@
#COURSE:Players Worst;
#SONG:WORST1:Medium;
#SONG:WORST2:Medium;
#SONG:WORST3:Medium;
#SONG:WORST4:Medium;
-6
View File
@@ -1,6 +0,0 @@
#COURSE:Random Caprice;
#SONG:*:ANOTHER:showcourse;
#SONG:*:ANOTHER:showcourse;
#SONG:*:ANOTHER:showcourse;
#SONG:*:ANOTHER:showcourse;
-7
View File
@@ -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;
@@ -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:;
@@ -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;
-5
View File
@@ -1,5 +0,0 @@
#COURSE:Tricky Random;
#SONG:*:Medium:1.5x,reverse;
#SONG:*:Medium:expand;
#SONG:*:Medium:0.25x,dark;
#SONG:*:Medium:sudden,land;
+3 -1
View File
@@ -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)
+24
View File
@@ -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);
}
+16
View File
@@ -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();
}
+67
View File
@@ -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.
*/
+66
View File
@@ -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.
*/
+28 -10
View File
@@ -2,6 +2,8 @@
<!--
# This file is UTF-8; to be readable, edit it in an editor capable
# of UTF-8, such as Notepad in Windows 2000 and later.
# Also it's best to view this with a font that supports various UTF-8
# characters, as opposed to monospaced fonts.
#
# Six keywords: TitleFrom, ArtistFrom, SubtitleFrom, TitleTo,
# ArtistTo, SubtitleTo.
@@ -42,9 +44,7 @@
<!-- "Candy", "Candy heart", or "Candy $". -->
<Translation TitleFrom="Candy(( heart)?|\$)" ArtistFrom=".*(Riyu|りゆ).*" TitleTo="CANDY♡" />
<Translation TitleFrom="(Kakumei)|(\+\{)" TitleTo="革命" />
<!-- Matsuri Japan is often just "Japan". There may be other songs by that name, too, so match the artist, too. -->
<Translation TitleFrom="Japan" ArtistFrom=".*(Re-Venge)|(RevenG).*" TitleTo="祭 JAPAN" />
<!-- Fix up hacked titles: -->
<!-- Fix up hacked titles from 3.0 spigumus hacks: -->
<Translation TitleFrom="} JAPAN" TitleTo="祭 JAPAN" />
<Translation TitleFrom="\+\{" TitleTo="革命" />
<Translation TitleFrom="Sweet Sweet (Love |\$ )?Magic" TitleTo="Sweet Sweet ♡ Magic" />
@@ -102,7 +102,7 @@
<Translation TitleFrom="(Kick the Can|One Two|Na-Na|Swing It)" ArtistFrom="BUS STOP" ArtistTo="BUS★STOP" />
<Translation ArtistFrom="dj TAKA feat. ?Noria" ArtistTo="dj TAKA feat. のりあ" />
<Translation ArtistFrom="(Miyuki Kunitake)|(Kunitake Miyuki)" ArtistTo="くにたけみゆき" />
<!-- TM: -->
<!-- Tournamix: -->
<Translation ArtistFrom="(Masahiro Andoh)|(Andoh Masahiro)" ArtistTo="安藤まさひろ" />
<Translation TitleFrom="Sakura Saku" TitleTo="桜咲く" />
<!-- Theme from Excel Saga: 愛(忠誠心) -->
@@ -110,16 +110,16 @@
<Translation ArtistFrom="(Toshio Masuda)|(Masuda Toshio)" ArtistTo="舛田利雄" />
<!-- Theme from Trigun -->
<Translation ArtistFrom="(Tsuneo Imahori)|(Imahori Tsuneo)" ArtistTo="今堀恒雄" />
<!-- TM2: -->
<!-- Tournamix 2: -->
<!-- http://www.web-konami.com/products/ps2/castlevania/ -->
<Translation ArtistFrom="(Michuri Yamane)|(Yamane Michuri)" ArtistTransTo="Michiru Yamane" ArtistTo="山根ミチル" />
<!-- TM3: -->
<!-- Tournamix 3: -->
<Translation TitleFrom="Tsugaru Kaikyou no Onna" TitleTo="津軽海峡の女" ArtistTo="ソニン" />
<Translation TitleFrom="Kaniyuuutsu" TitleTo="甘いユウウツ" />
<Translation TitleFrom="Negai" TitleTo="願い" />
<!-- http://www.avexnet.or.jp/avexdb/morinaga/ -->
<Translation ArtistFrom="(Hatsumi Morinaga)|(Morinaga Hatsumi)" ArtistTo="守永初美" />
<!-- TM4: -->
<!-- Tournamix 4: -->
<Translation TitleFrom="Akumajo Dracula MEDLEY" TitleTo="悪魔城ドラキュラMEDLEY" />
<Translation ArtistFrom="Kukeihakurabu" ArtistTo="矩形波倶楽部" />
<Translation ArtistFrom="Yuji Ueda & Yui Horie" ArtistTo="上田祐司&堀江由衣" />
@@ -157,7 +157,7 @@
<Translation ArtistFrom="(Yuzo Koshiro)|(Koshiro Yuzo)" ArtistTo="古代祐三" />
<!-- VLAD -->
<Translation ArtistFrom="Jaurim" ArtistTo="자우림" />
<!-- TM4+: -->
<!-- Tournamix 4+: -->
<Translation ArtistFrom="Gwashi" ArtistTo="グワシ" />
<Translation TitleFrom="Kuru Kuru Mirakuru" TitleTo="くるくるミラクル" />
<Translation TitleFrom="Nuh" TitleTo="너" />
@@ -195,7 +195,7 @@
<Translation ArtistFrom="M-FLO loves Crystal Kay" ArtistTo="M-FLO l♡ves Crystal Kay" />
<Translation TitleFrom="Syunikiss" ArtistFrom="Malice Mizer" SubtitleTo="~二度目の哀悼~" />
<Translation TitleFrom="kono omoi o tsutaetai" ArtistFrom="sakura" TitleTo="この思いを伝えたい" ArtistTo="さくら" />
<!-- TM5: -->
<!-- Tournamix 5: -->
<Translation TitleFrom="OMEGA" ArtistFrom="MAX DRAGON" TitleTo="Ω" />
<Translation TitleFrom="Haruka Kanata" TitleTo="遥か彼方" />
<Translation TitleFrom="Honjitsu wa Seiten Nari" TitleTo="本日は晴天なり" />
@@ -240,7 +240,7 @@
<Translation ArtistFrom="KaW vs. Smiley vs. Inspector K" ArtistTo="KaW vs. ☺ vs. Inspector K" />
<!-- http://www.hicbc.com/tv/kirby/staff/ -->
<Translation ArtistFrom="Miyagawa Akira" ArtistTo="宮川彬良" />
<!-- OSC: -->
<!-- OSC (Original Step Contest; http://ddrosc.bemanistyle.com/osc3/): -->
<Translation TitleFrom="Love Hina" SubtitleFrom="- main theme" ArtistFrom="Hayashibra Megumi\(Haruka Urashima\)"
TitleTo="桜咲く" TitleTransTo="Sakura Saku" SubtitleTo="-erase-" SubtitleTransTo="-erase-" ArtistTo="林原めぐみ"
ArtistTransTo="Hayashibara Megumi (Haruka Urashima)" />
@@ -282,6 +282,7 @@
<Translation TitleFrom="Zonapara" TitleTo="ゾナパラ" />
<Translation SubtitleFrom=".*WHY! Parapara Remix.*" SubtitleTo="WHY! パラパラ・リミックス" />
<Translation ArtistFrom="Zobekka" ArtistTo="ゾベッカ" />
<!-- (not oha sta, hurr) -->
<Translation ArtistFrom="Omega Versus KTz" ArtistTo="Ω Versus KTz" />
<Translation ArtistFrom="DJ Demon Versus Omega" ArtistTo="DJ 鬼 Versus 鬼" />
<Translation ArtistFrom="NW 260, ZZ, and 290" ArtistTo="NW 260, &doublezeta;, and 290" />
@@ -348,6 +349,20 @@
<!-- In the Groove: -->
<Translation ArtistFrom="Smiley" ArtistTo="☺" />
<Translation ArtistFrom="KaW feat. Smiley" ArtistTo="KaW feat. ☺" />
<!-- Mungyodance -->
<Translation TitleFrom="Hardcore Disco (Kitsune\? Remix)" TitleTo="Hardcore Disco (Kitsune² Remix)" />
<Translation TitleFrom="Micro N\?" TitleTo="Micro N²" />
<Translation TitleFrom="Caramelldansen (Ryu\* Remix)" TitleTo="Caramelldansen (Ryu☆ Remix)" />
<Translation ArtistFrom="Kitsune\?" ArtistTo="Kitsune²" />
<Translation ArtistFrom="Bl\?mchen" ArtistTo="Blümchen" />
<Translation ArtistFrom="Kitsune\? and Emoticon" ArtistTo="Kitsune² and Emoticon" />
<Translation ArtistFrom="Emoticon & Kitsune\?" ArtistTo="Emoticon & Kitsune²" />
<Translation ArtistFrom="D-Mode-D feat. Kitsune\?" ArtistTo="D-Mode-D feat. Kitsune²" />
<Translation ArtistFrom="Kitsune\? and D-Mode-D" ArtistTo="Kitsune² and D-Mode-D" />
<Translation ArtistFrom="Hecate and Kitsune\?" ArtistTo="Hecate and Kitsune²" />
<Translation ArtistFrom="Renard vs Kitsune\?" ArtistTo="Renard vs Kitsune²" />
<Translation ArtistFrom="MGD-Crew feat. Kitsune\?" ArtistTo="MGD-Crew feat. Kitsune²" />
<Translation ArtistFrom="Sonitus Vir x Kitsune\?" ArtistTo="Sonitus Vir x Kitsune²" />
<!-- Misc: -->
<Translation TitleFrom="Pokemon" TitleTo="Pokémon" DontTransliterate />
<Translation ArtistFrom="Omega Versus KTz" ArtistTo="Ω Versus KTz" />
@@ -417,5 +432,8 @@
<Translation TitleFrom="((Dance Station 3DDX)|(DS3DDX))(.*)" TitleTo="3DDX\${4}" />
<Translation TitleFrom="((BeatMania)|(Beatmania)|(BEATMANIA)|(beatmania))(.*)" TitleTo="BM\${6}" />
<Translation TitleFrom="((In The Groove)|(In the Groove))(.*)" TitleTo="ITG\${4}" />
<!-- <Translation TitleFrom="((Mungyodance)|(Mungyodance))(.*)" TitleTo="MGD\${4}" /> -->
<!-- <Translation TitleFrom="((Flightmix)|(Flightmix))(.*)" TitleTo="FMX\${4}" /> -->
<!-- <Translation TitleFrom="((Kurimix)|(Kurimix))(.*)" TitleTo="KMX\${4}" /> -->
</Groups>
</Translations>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 20 KiB

-90
View File
@@ -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)
-79
View File
@@ -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 -=-
+839
View File
@@ -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 Santamaría 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 Santamaría 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 Santamaría Rogado (howl)]
(http://www.stepmania.com/forums/showthread.php?t=21430)
20091114
--------
* Add support for .oga and .ogv files. [David Santamaría Rogado (howl)]
(http://pastie.org/698741)
20091113
--------
* 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."
* 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 Santamaría 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 Santamaría 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.
_____________________________________________________________________________
+47
View File
@@ -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).
+61
View File
@@ -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.
+17
View File
@@ -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.
-194
View File
@@ -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]
+36
View File
@@ -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;
+23
View File
@@ -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.
+29 -1
View File
@@ -1,5 +1,33 @@
The following license applies to most of the StepMania codebase:
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.
+1765
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -142,6 +142,9 @@
<xs:complexType name="Function" mixed="true">
<xs:group ref="DocumentationGroup" minOccurs="0" maxOccurs="unbounded" />
<xs:attribute name="name" type="Identifier" use="required" />
<xs:attribute name="renamed" type="Identifier" use="optional" />
<xs:attribute name="sm-ssc" type="Identifier" use="optional" />
<xs:attribute name="theme" type="Identifier" use="optional" />
<xs:attribute name="return" type="IdentifierOrTable" use="optional" />
<xs:attribute name="arguments" type="ArgumentList" use="optional" />
</xs:complexType>
+117 -31
View File
@@ -17,85 +17,130 @@
<xsl:comment>This file is automatically generated. Do not edit it.</xsl:comment>
<html>
<head>
<title>StepMania LUA Information</title>
<title>sm-ssc Lua Information</title>
<style type="text/css">
th {
background-color: #CCCCFF;
border-style: solid;
background-color: #DDDDDD;
border: 0px solid #888888;
border-width: thin;
padding: 2px;
font-size: 150%
padding: 3px;
font-size: 1.2em;
}
thead th {
background-color: #EEEEEE;
}
table {
border-style: ridge;
border-collapse: collapse
border-style: none;
border-collapse: collapse;
}
td {
padding: 2px;
border-style: solid;
border-width: thin
border-width: thin;;
}
hr {
width: 90%
width: 90%;
}
code {
font-family: monospace
font-family: monospace;
}
.code {
font-family: monospace
font-family: monospace;
}
.returnTypeCell {
font-family: monospace;
text-align: right;
vertical-align: text-top;
width: 10em
width: 10em;
background-color: #EEEEEE;
}
.descriptionCell {
text-align: justify;
vertical-align: text-top
vertical-align: text-top;
background-color: #DDEEFF;
}
.renamed{
text-align: justify;
vertical-align: text-top;
background-color: #FFEEDD;
}
.sm-ssc{
text-align: justify;
vertical-align: text-top;
background-color: #FFDDEE;
}
._fallbackTheme{
text-align: justify;
vertical-align: text-top;
background-color: #DDFFEE;
}
.defaultTheme{
text-align: justify;
vertical-align: text-top;
background-color: #FFD400;
}
.descriptionName {
font-family: monospace;
font-weight: bold
font-weight: bold;
}
.descriptionArguments {
font-family: monospace
font-family: monospace;
}
.descriptionText {
text-indent: 2em;
margin-top: 0;
margin-bottom: 0
margin-bottom: 0;
}
.primitiveType {
font-family: monospace;
color: #0000ff
color: #0000ff;
}
.enumNameCell {
background-color: #DDEEFF;
font-size: 1.2em;
}
.enumValueCell {
background-color: #EEEEEE;
font-size: 1.2em;
}
a.classType:link {
font-family: monospace;
color: #cc0000
color: #cc0000;
}
a.classType:visited {
font-family: monospace;
color: #440000
color: #440000;
}
a.enumType:link {
font-family: monospace;
color: #cc0000
color: #cc0000;
}
a.enumType:visited {
font-family: monospace;
color: #440000
color: #440000;
}
.trigger {
cursor: pointer
cursor: pointer;
}
.footer {
text-align: center
text-align: center;
}
.validate {
border: 0;
width: 88px;
height: 31px
height: 31px;
}
#header{
text-align: center;
padding-bottom: 0.5em;
}
#header h2{
margin-top: 0px;
margin-bottom: -1em;
}
#sections{
margin-left: auto;
margin-right: auto;
}
</style>
<script type="text/javascript">
@@ -143,8 +188,18 @@
<xsl:template match="sm:Lua">
<div>
<h2>StepMania LUA Information</h2>
<table>
<div id="header">
<h2><a href="http://ssc.ajworld.net/sm-ssc/">sm-ssc</a> Lua Information</h2><br/>
<small>WARNING: Bindings are subject to change at any time. This includes, but is not limited to: renaming, removal, changing of arguments/return types.<br/>
To generate this file yourself, pass <code>--ExportLuaInformation</code> as an argument to the sm-ssc executable.</small>
</div>
<table id="sections">
<thead>
<tr>
<th colspan="6">Sections</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="#Singletons">Singletons</a></th>
<th><a href="#Classes">Classes</a></th>
@@ -153,8 +208,19 @@
<th><a href="#Enums">Enums</a></th>
<th><a href="#Constants">Constants</a></th>
</tr>
</tbody>
</table>
</div>
<div>
<fieldset>
<legend>Function Colors</legend>
<div class="descriptionCell">Available in SM4 baseline and sm-ssc</div>
<div class="renamed">Renamed or otherwise modified in sm-ssc (differences will be noted)</div>
<div class="sm-ssc">Available in sm-ssc only (for the time being)</div>
<div class="_fallbackTheme">Defined in sm-ssc's _fallback theme <small>(<em>Foundation</em>)</small></div>
<div class="defaultTheme">Defined in sm-ssc's default theme <small>(<em>Urban Fragments</em>)</small></div>
</fieldset>
</div>
<xsl:apply-templates select="sm:Singletons" />
<xsl:apply-templates select="sm:Classes" />
<xsl:apply-templates select="sm:Namespaces" />
@@ -386,7 +452,18 @@
<xsl:with-param name="type" select="$elmt/@return" />
</xsl:call-template>
</td>
<td class="descriptionCell">
<!-- check for modifiers -->
<td>
<xsl:attribute name="class">
<xsl:choose>
<!-- "renamed" also covers functions with modified behavior -->
<xsl:when test="$elmt/@renamed='true'">renamed</xsl:when>
<xsl:when test="$elmt/@sm-ssc='true'">sm-ssc</xsl:when>
<xsl:when test="$elmt/@theme='_fallback'">_fallbackTheme</xsl:when>
<xsl:when test="$elmt/@theme='default'">defaultTheme</xsl:when>
<xsl:otherwise>descriptionCell</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<span class="descriptionName">
<xsl:value-of select="@name" />
</span>
@@ -407,7 +484,13 @@
</xsl:when>
<xsl:otherwise>
<td class="returnTypeCell" />
<td class="descriptionCell">
<td>
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="$elmt/@sm-ssc='true'">sm-ssc</xsl:when>
<xsl:otherwise>descriptionCell</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<span class="descriptionName"><xsl:value-of select="@name" /></span>
</td>
</xsl:otherwise>
@@ -514,8 +597,8 @@
<xsl:for-each select="sm:EnumValue">
<xsl:sort data-type="number" select="@value" />
<tr class="code">
<td><xsl:value-of select="@name" /></td>
<td><xsl:value-of select="@value" /></td>
<td class="enumNameCell"><xsl:value-of select="@name" /></td>
<td class="enumValueCell"><xsl:value-of select="@value" /></td>
</tr>
</xsl:for-each>
</table>
@@ -544,7 +627,10 @@
<xsl:for-each select="sm:Constant">
<xsl:sort select="@name" />
<tr class="code">
<td><xsl:value-of select="@name" /></td>
<td>
<xsl:value-of select="@name" />
</td>
<td><xsl:value-of select="@value" /></td>
</tr>
</xsl:for-each>
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

@@ -0,0 +1,159 @@
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=x-sjis">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>BM98Data_format_specification</title>
</head>
<body bgcolor="#F1DBC0">
<p><font color="#008080" size="3" face="MS Sans Serif"><strong>BMS
Format Specification</strong></font></p>
<p align="right">written by Urao Yane(yaneurao@sun-inet.or.jp)</p>
<p>&quot;BMS&quot; 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.</p>
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
<p><font color="#008080">&lt;Command Line&gt;</font></p>
<p>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.</p>
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
<p><font color="#008080">&lt;Header&gt;</font></p>
<p>#PLAYER 1<br>
This data is for Single Play.</p>
<p>#PLAYER 2<br>
This data is for Two Play.</p>
<p>#PLAYER 3<br>
This data is for Double Play.</p>
<p>#GENRE xxxxxxxx<br>
Definition of Genre.</p>
<p>#TITLE xxxxxxxx<br>
Definition of Title.</p>
<p>#ARTIST xxxxxxxx<br>
Definition of Artist.</p>
<p>#BPM xxx<br>
Definition of BPM.(Beat Per Minite) at the top of music. default
: 130</p>
<p>#MIDIFILE xxxxxxx.mid<br>
Background music by MIDI.</p>
<p>#PLAYLEVEL x<br>
Information of Game Level for player.</p>
<p>#RANK x<br>
judgement level.<br>
x = 0 :very hard, 1: hard, 2: normal, 3: easy</p>
<p>@</p>
<p>#VOLWAV xxx<br>
relative volume control (percentage)</p>
<p>#WAVxx yyyyyyyy.wav<br>
definition of Wave Data. xx : 01 to FF (Hex) , yyyyyyyy.wav :
wave file name</p>
<p>e.g.<br>
#WAV01 HOUSE01.WAV // assign HOUSE01.WAV to 01 wav<br>
#WAV02 HOUSE02.WAV // assign HOUSE02.WAV to 02 wav<br>
#WAVFF HOUSE03.WAV // assign HOUSE03.WAV to FF wav</p>
<p>#BMPxx yyyyyyyy.bmp<br>
definition of Bitmap file. xx : 01 to FF(Hex) , yyyyyyyy.bmp :
bitmap file name<br>
Bitmap size must be 256 * 256.(max color 65536)</p>
<p>e.g.<br>
#BMP01 HOUSE01.BMP // assign HOUSE01.BMP to 01 bitmap<br>
#BMP02 HOUSE02.BMP // assign HOUSE02.BMP to 02 bitmap<br>
#BMPEE HOUSE03.BMP // assign HOUSE03.BMP to EE bitmap<br>
</p>
<p>But ,the bitmap defined by #BMP00 is something special.<br>
This bitmap shows when a player do a poor play.</p>
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
<p>// a sample of random loading function</p>
<p>#random 2 // create a random number (1 or 2)</p>
<p>#if 1 // if the number was equal to 1 then...<br>
#00111:31313131 // this is effective...<br>
#endif</p>
<p>#if 2 // if the number was equal to 2 then...<br>
#00113:32003232 // this is effective<br>
#endif</p>
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
<p><font color="#008080">&lt;Channel Messages&gt;</font></p>
<p>#aaabb:cccccccc</p>
<p>aaa: track number (from 000 to 999)<br>
bb : channel number where you want to send message.(from 00 to
FF)<br>
cccccccc : &lt;message&gt;</p>
<p><font color="#008080">&lt;a brief Channel Number&gt;</font></p>
<p>01 : BGM(background music by WAVE)<br>
03 : changing a Tempo<br>
04 : BGA(background animation)<br>
06 : changing Poor-bitmap<br>
11 to 17 : Object Channel of 1 player side<br>
21 to 27 : Object Channel of 2 player side<br>
</p>
<p><font color="#008080">&lt;Example&gt;</font></p>
<p>#00211:03030303<br>
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 <font color="#FF0000"><em>evenly</em></font>
in this track.</p>
<p>Please try the following patterns.</p>
<p>#00211:0303030303</p>
<p>#00211:0303000303</p>
<p>#00211:010101<br>
#00211:00020202</p>
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
<p>This document and this format is <font color="#FF0000">free</font>!<br>
I hope the day will come when my BMS format will use all over the
world.</p>
<p align="right">Urao Yane</p>
<p><a href="http://www.sun-inet.or.jp/~yaneurao/">back to my
homepage</a></p>
</body>
</html>
@@ -0,0 +1,564 @@
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=x-sjis">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>BM98FinalSecret</title>
</head>
<body bgcolor="#F1DBC0">
<p><font color="#008080" size="4" face="DFPPOP体"><strong>BM98FinalSecret</strong></font></p>
<p>BM98最後の秘密とは、Extended
Character機能、すなわち、ゲーム中のキャラクターすべてをBMSファイル側で変更する機能である。</p>
<p>ただし、この機能は、拡張し納得のいくものになり次第、公開しようと思っていたのだが、いろいろ事情があって、BM98そのものの開発をうち切ることになり、日の目を見ることのなくなった機能である。</p>
<p>そこで、この機能を使った曲の、BMRの方での動作は保証できない。あくまでBM98ver3.18用として認識していただきたい。また、それ以降のバージョンで、きくちゃんによるものは、ビットマップファイルが書き換えられているので、このテキストの内容の限りではない。</p>
<p>また、基本的にBM98について、やねうらおは一切サポートしないと言っているの同様、ここの内容についても、一切サポートしないので、質問メールは勘弁してほしい。</p>
<p>それから、スプライトナンバー等、BM98固有の定数が出てくるが、これらは、BMRとは一切無縁である。</p>
<p> </p>
<p> </p>
<p>まず、この機能のことをヘルプでも少し触れているので、それを抜粋する。</p>
<p>--------------------------------------------------</p>
<p>Extended Character (BM98 v3.18以降) <非公開機能></p>
<p>以下は、やねうらおのメモだとお考えください(笑)</p>
<p>・ゲーム中の任意のスプライトをユーザー定義する機能。</p>
<p>#ExtChr &lt;SpriteNo.&gt; &lt;BMPNo.&gt;</p>
<p>&lt;start_x&gt; &lt;start_y&gt; &lt;end_x&gt; &lt;end_y&gt;</p>
<p>{ &lt;offset_x&gt; &lt;offset_y&gt; { &lt;x&gt; &lt;y&gt; } } </p>
<p>通例、これとExtended Object機能とを併用して使う。</p>
<p>スプライトNo.とキャラクタNo.とは意味が違う。--------------------------------------------------</p>
<p>また、Extended Object機能と併用して使うと書いてあるが、そいつは、どこにあるかというと、チャンネルナンバー05番のところにちゃっかり書いてある。</p>
<p>--------------------------------------------------</p>
<p>05   [Extended Object] <非公開機能></p>
<p>  落下してくるオブジェを別のキャラクターナンバーのものにすり替える機能。この行の下にある行のオブジェに順番に割り振られる。</p>
<p>--------------------------------------------------</p>
<p>このチャンネルナンバーの次の行に書いてあるオブジェ配置データに対して、こいつが有効であることはわかるが、キャラクターとして何をどう書けば良いのか、それがまったくもって不明確である。</p>
<p>実を言うと、やねうらおもよくは覚えていない(笑)</p>
<p>なんか、あのときは、坂本龍一の曲をモチーフに、自分なりに編曲を行なっていて、そのとき1オクターブのピアノ鍵盤が出てるBMSファイルを作るつもりで、こんな機能をつけた覚えだけはある。</p>
<p>そんなわけで、ちょっとソーステキストを覗いてみよう。</p>
<p><font face="MS ゴシック">int ExtChr[] = {<br>
0,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,<br>
// 0x ユーザー定義可能部分<br>
976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,<br>
// 1x  ユーザー定義可能部分<br>
992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,<br>
// 2x ユーザー定義可能部分<br>
1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,<br>
// 3x<br>
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br>
// 4x<br>
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br>
// 5x<br>
941,942,943,944,945,946,947,948,949,950,951, 0, 0, 0, 0, 0,<br>
// 6x 金色オブジェ5パターン 赤 緑 灰 黒BM98金色(新オブジェ)<br>
730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,<br>
// 7x 金A B C D E F G H I J K L M N O P <br>
746,747,748,749,750,751,752,753,754,755,760,761,762,763,764,765,<br>
// 8x Q R S T U V W X Y Z a b c d e f<br>
766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,<br>
// 9x g h i j k l m n o p q r s t u v<br>
782,783,784,785,790,791,792,793,794,795, 0, 0, 0, 0, 0, 0,<br>
// ax w x y z - &quot; ! ? &amp; .<br>
800,801,805,806,807,808,810,811,812,910,911,912,913,940, 0, 0,<br>
// bx BM レコードSong SP DP BPM ヒト ★ ☆ 1P 2P 1Pd
2Pd 坂田<br>
850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,<br>
// cx 白A B C D E F G H I J K L M N O P <br>
866,867,868,869,870,871,872,873,874,875,876,877,878,879,890,891,<br>
// dx Q R S T U V W X Y Z / . ! % @ ?<br>
720,721,722,723,724,725,726,727,728,729, 0, 0, 0, 0, 0, 0,<br>
// ex 金0 1 2 3 4 5 6 7 8 9<br>
880,881,882,883,884,885,886,887,888,889, 0, 0, 0, 0, 0, 0<br>
// fx 白0 1 2 3 4 5 6 7 8 9<br>
};<br>
</font></p>
<p><font face="MS ゴシック">ちゅーことで、05チャンネルにデータを送信することで、01~FFまで、255種類のキャラクタを表示させるができるわけだが、それが何番のスプライトに対応するものであるかは、この表を見れば一目瞭然だ。(ただし、やねうらおにのみ:笑)</font></p>
<p><font face="MS ゴシック">たとえば、キャラクタナンバー01は、スプライトナンバー961である。(ユーザー定義可能部分)<br>
また、キャラクターナンバー50は、スプライトナンバー941であり、それは金色オブジェである。<br>
はたまた、キャラクターナンバーD2は、スプライトナンバー867であり、それは、Rという白い文字である。</font></p>
<p><font face="MS ゴシック">というようになっている。ということで、実は、第5チャンネルだけで、拡張キャラクタとして、文字などをオブジェとして落下させることができる。</font></p>
<p><font face="MS ゴシック">さらに、ここで、問題となるのは、スプライトナンバー961~1023がユーザー定義可能部分として解放されていることである。ここに来て、さきほどの</font></p>
<p>#ExtChr &lt;SpriteNo.&gt; &lt;BMPNo.&gt; &lt;start_x&gt;
&lt;start_y&gt; &lt;end_x&gt; &lt;end_y&gt; { &lt;offset_x&gt;
&lt;offset_y&gt; { &lt;x&gt; &lt;y&gt; } } </p>
<p><font face="MS ゴシック">が初めて意味を持つ。{
}の部分は省略可能ということ。</font></p>
<p><font face="MS ゴシック">#ExtChr 961 1 0 0 99 99</font></p>
<p><font face="MS ゴシック">などとすれば、スプライトナンバー961を、ビットマップナンバー1(これは、#bmpで定義したときのビットマップナンバー)の(0,0)から(99,99)の100×100ドットの部分として定義するという意味である。これにより、ユーザーで用意した任意のビットマップの特定の部分をユーザースプライトとして定義することが可能となり、それをさきほどのExtended
Objectで表示することが可能だというわけだ。(といま思い出した:笑)</font></p>
<p>そして、&lt;offset_x&gt; &lt;offset_y&gt;をオプションで指定できるが、これは、オブジェ位置を調整するためにある。</p>
<p>たとえば、オブジェを表示するとき、オブジェ高さを表示段階で参照して、そのオブジェの下面にプレイポイントが来るようにするのは、あまり洗練されたプログラムではないとやねうらおは考えたわけだ。このころ、ぽっぷんの移植のことが少し頭にあったので、オブジェクトの下面がプレイポイントでないこともありうることを多少意識もしていたのだ。</p>
<p>そこで、オフセットを持たせることにした。たとえば、(-5,-10)のオフセットを持つスプライトに対しては、(100,120)の座標に表示しなさい、と命令しても(95,110)の座標に表示されるわけである。このようにすることによって、内部的には、(100,120)の座標で管理できる。すなわち、プレイポイントに表示するように指示しておけば、それのスプライト表示の段階で、適切なオフセットを得て、適切な位置に表示されるという仕組みである。</p>
<p>ただ、そのことに気づいたのは、ver3.16あたりなので、スクラッチは実はオフセットを持っていなかった。(と思う) それの調整を行なうためにも、このオフセット値は重要である。</p>
<p>最後のオプションのX,Yだが、この指定があると、画面上の、その座標位置にそのスプライトを配置するのである。鍵盤のデザインを変更したり、DanceDanceRevolutionのようにぺたんと大きな矢印を用意したりすることの可能だ。また、いま定義されているスプライトを上から定義して、画面外に追い出し、表示されないようにすることもできる。</p>
<p> </p>
<p>わくわくしてきたところで、どのスプライトナンバーが何であるのか、その割付を完全に知りたいと思う人もいるだろう。そうでなければ、いまある鍵盤を別のキャラクタに再定義してしまうというようなことができないからである。</p>
<p>そこで、以下には、スプライト定義のためのルーチンをそのまま抜粋する。メモのようにして、何番が何であるか記されている。ただし、dynamicと書いてある部分は、動的に変更されるから、こいつを変えても無駄である。また、スプライトは、原則的に0~511までが表示されるもので、あと512~1023は、非表示であって、実行段階で、10番のスプライトは513番のスプライトをコピーせよ!などとして、10番にスプライト特性情報を持ってきて、10番のスプライトを画面表示することにより、513番のスプライトを画面表示することにしてある。このようにすることにより、一種類のスプライトを複数個表示したりすることが簡単になるし、何より管理の手間が楽になる。</p>
<p>しかし、増やしすぎて、512個では足りなくなったため、ネオン表示用に1024~1087を使っていたような気もする。(なんかダサイなあ...)</p>
<p>まあ、このへんは突貫工事なので深くはつっこまないように(笑)</p>
<p> </p>
<p>void DefSpriteGames(void) //
ゲーム画面のためのスプライト初期化<br>
{<br>
int i;<br>
for(i=0;i&lt;512*2+64;i++) {<br>
ySpriteMove(i,-10000,-10000); // 全クリア<br>
ySpriteVisible(i,true);<br>
} <br>
<br>
// 00 - 11 : (dynamic sprite) Greatの爆発アニメ用<br>
// 12-75 : Score表示用 (61-76 : AutoPlay表示用)<br>
// 71-75 : (dup.) CPU % 負荷率表示用<br>
<br>
// 77-79 : 空きのはず..<br>
<br>
// 80,81,82,83,84,85,86,87,88 : 1P側の鍵盤フラッシュ&スクラッチ<br>
// 89,90,91,92,93,94,95,96,97 : 2P側の鍵盤フラッシュ&スクラッチ<br>
<br>
// kazu:光っているキーボードの個別パーツ。<br>
yDefSprite(80,112,1,123,25); // 1(上部)<br>
ySpriteMove(80,SCR1P1+1,SCRDWN3-1);<br>
yDefSprite(81,112,26,133,46); // 1(下部)<br>
ySpriteMove(81,SCR1P1+1,SCRDWN3+25-1);<br>
<br>
yDefSprite(82,124,1,140,25); // <br>
ySpriteMove(82,SCR1P2+2,SCRDWN3);<br>
<br>
yDefSprite(83,141,1,146,25); // 3(上部)<br>
ySpriteMove(83,SCR1P3+8,SCRDWN3-1);<br>
yDefSprite(84,133,26,154,46); // 3(下部)<br>
ySpriteMove(84,SCR1P3+1,SCRDWN3+25-1);<br>
<br>
yDefSprite(85,147,1,163-1,25); // <br>
ySpriteMove(85,SCR1P4+4,SCRDWN3);<br>
<br>
yDefSprite(86,164-2,1,175,25); // 5(上部)<br>
ySpriteMove(86,SCR1P5+9,SCRDWN3-1);<br>
yDefSprite(87,154,26,175,46); // 5(下部)<br>
ySpriteMove(87,SCR1P5+1,SCRDWN3+25-1);<br>
<br>
yDefSprite(88,177,2,210,46); // スクラッチ<br>
ySpriteMove(88,SCR1P6+2,SCRDWN3);<br>
<br>
for(i=80;i&lt;=88;i++){<br>
ySpriteCopy(i+9,i); // かしこいなー俺:p<br>
ySpriteAdd(i+9,SCROFS,0); // スプライト相対移動<br>
}<br>
<br>
// 98,99 : 画面下のキーボード(赤ライン除く)<br>
yDefSprite(98,1,1+5,100,89); // for 1P
ノーマルキーボード(全体。スクラッチ含む)<br>
ySpriteCopy(99,98); // for 2P<br>
<br>
// 100-309 : (dynamic sprite) ノート。1画面同時数200という制限はここから来る<br>
<br>
// 310,311 : 1P &amp; 2P &quot;Great / Good / Bad / Poor &quot;<br>
// NoteSprite.h
あっちゃで使うから、これ、使っちゃダメよん。<br>
<br>
// 312-315 : &quot;1P&quot;,&quot;2P&quot;<br>
<br>
// 316 - 325 : 縦小節線 (こっちの方が優先か...)<br>
for(i=0;i&lt;10;i++){<br>
yDefSprite(316+i,64,91,64,91+(SCRDWN&gt;&gt;1)-1);<br>
}<br>
ySpriteMove(316,SCR1P3,0); // もう移動しといちゃえ!<br>
ySpriteMove(317,SCR1P5,0); // もう移動しといちゃえ!<br>
ySpriteMove(318,SCR1P6,0); // もう移動しといちゃえ!<br>
ySpriteMove(319,SCR1P3,SCRDWN&gt;&gt;1); //
もう移動しといちゃえ!<br>
ySpriteMove(320,SCR1P5,SCRDWN&gt;&gt;1); //
もう移動しといちゃえ!<br>
ySpriteMove(321,SCR1P6,SCRDWN&gt;&gt;1); //
もう移動しといちゃえ!<br>
<br>
// 322-7 : 2P用縦小節線<br>
<br>
// 328-330 : CPU負荷率<br>
<br>
// 331-430 : (dynamic sprite) Voltage Meter<br>
<br>
// 431,432,433,434,435,436 : 1P
キーを叩いたときの赤の縦ライン<br>
// 437,438,439,440,441,442 : 2P
キーを叩いたときの赤の縦ライン<br>
for(i=431;i&lt;=442;i++){<br>
if (i==436 || i==442) {<br>
yDefSprite(i,65,91,99,91+160-1); // スクラッチライン<br>
} else {<br>
yDefSprite(i,65,91,84,91+160-1); // <br>
}<br>
ySpriteVisible(i,false); //
ディフォルトでは不可視やろ?<br>
}<br>
ySpriteMove(431,SCR1P1+1,0);<br>
ySpriteMove(432,SCR1P2+1,0);<br>
ySpriteMove(433,SCR1P3+1,0);<br>
ySpriteMove(434,SCR1P4+1,0);<br>
ySpriteMove(435,SCR1P5+1,0);<br>
ySpriteMove(436,SCR1P6+1,0);<br>
for(i=0;i&lt;6;i++){<br>
ySpriteCopy(437+i,431+i);<br>
ySpriteAdd(437+i,SCROFS,0);<br>
} <br>
<br>
for(i=0;i&lt;12;i++){<br>
ySpriteCopy(443+i,431+i);<br>
ySpriteAdd(443+i,0,SCRDWN&gt;&gt;1);<br>
}<br>
<br>
// 455-497 : for displaying debug message(dup.)<br>
// (455-486) : 画面フレーム他(定義は、BGScr.cpp)<br>
// (487-497) : INSERT COIN &amp; CREDITS 0/2<br>
<br>
// 498-499 : 1P/2Pの下の赤ライン<br>
yDefSprite(498,1,1,100,5); // for 1P
ノーマルキーボード(全体。スクラッチ含む)<br>
// defined BGScr.cpp<br>
<br>
// 500-506 : FPSの表示用<br>
<br>
// 507 BM<br>
yDefSprite(507,340,345,426,374); //
BM98タイトルロゴ・小<br>
<br>
// 508-511<br>
yDefSprite(508,174,48,176,52); // 右向き三角マーク<br>
yDefSprite(509,178,48,180,52); // 左向き三角マーク<br>
ySpriteCopy(510,509);<br>
ySpriteCopy(511,510);<br>
<br>
/* <br>
(117,1,121,73) // 小節左サイドの線<br>
(239,1,247,73) // 小節右サイドの線<br>
*/<br>
<br>
// 513-1023 : free セコイことを言わずに豪快に使おう!<br>
for(i=0;i&lt;4;i++){<br>
yDefSprite(513+i,112,48+i*6,131,52+i*6); // 白オブジェ<br>
yDefSprite(523+i,133,48+i*6,152,52+i*6); // 黒オブジェ <br>
yDefSprite(533+i,147,147+i*6,180,151+i*6); // スクラッチ<br>
}<br>
yDefSprite(513+4,208,48,230,53); //
白オブジェのびよーん<br>
ySpriteOffset(513+4,-1,-1); // センタリング!<br>
yDefSprite(513+5,207,48,231,54); //
白オブジェのびよーん<br>
ySpriteOffset(513+5,-2,-2);<br>
<br>
yDefSprite(523+4,208,56,230,61); //
黒オブジェのびよーん <br>
ySpriteOffset(523+4,-1,-1);<br>
yDefSprite(523+5,207,56,231,62); //
黒オブジェのびよーん <br>
ySpriteOffset(523+5,-2,-2);<br>
<br>
yDefSprite(533+4,147,171,180,179); //
スクラッチのびよーん(1)<br>
yDefSprite(533+5,147,181,180,190); //
スクラッチのびよーん(2)<br>
<br>
// フリーゾーン(1拍分)<br>
yDefSprite(543,112,102,145,145-4);<br>
yDefSprite(544,147,102,180,145-4);<br>
yDefSprite(545,182,102,215,145-4);<br>
yDefSprite(546,112,147,145,190-4);<br>
yDefSprite(547,182,147,219,190); // びよーん BM98v3.16<br>
// ySpriteOffset(547,-2,0);<br>
yDefSprite(548,182,147,219,190); // びよーん BM98v3.16<br>
// ySpriteOffset(548,-2,0);<br>
<br>
yDefSprite(553,245,108,307,121); // GREAT<br>
yDefSprite(554,245,123,307,136); // GOOD<br>
yDefSprite(555,245,138,307,151); // BAD<br>
yDefSprite(556,245,153,307,166); // POOR<br>
<br>
yDefSprite(557,1,267,100,267); // 横小節線<br>
// ySetSpriteSize(557,120,1);<br>
<br>
// 赤文字<br>
for(i=0;i&lt;=9;i++){<br>
yDefSprite(560+i,245+i*12,168,255+i*12,183); // 0-9<br>
}<br>
<br>
yDefSprite(581,154,48,157,64); // ゲージ・緑(暗)<br>
yDefSprite(582,159,48,162,64); // ゲージ・緑(明)<br>
yDefSprite(583,164,48,167,64); // ゲージ・赤(暗)<br>
yDefSprite(584,169,48,172,64); // ゲージ・赤(明)<br>
<br>
for(i=0;i&lt;4;i++){<br>
yDefSprite(700+i,112+i*30,72,140+i*30,100); // GREAT爆発アニメ<br>
}<br>
<br>
// 0-9 , A-Z , a-z ...<br>
// 金色の文字<br>
yDefSprite(720,245,89,257,106); // 0<br>
yDefSprite(721,259,89,265,106); // 1<br>
yDefSprite(722,267,89,279,106); // 2<br>
yDefSprite(723,281,89,293,106); // 3<br>
yDefSprite(724,295,89,309,106); // 4<br>
yDefSprite(725,311,89,323,106); // 5<br>
yDefSprite(726,325,89,337,106); // 6<br>
yDefSprite(727,339,89,351,106); // 7<br>
yDefSprite(728,353,89,365,106); // 8<br>
yDefSprite(729,367,89,379,106); // 9<br>
<br>
yDefSprite(730,245,1,257,18); // A<br>
yDefSprite(731,259,1,271,18); // B<br>
yDefSprite(732,273,1,285,18); // C<br>
yDefSprite(733,287,1,299,18); // D<br>
yDefSprite(734,301,1,311,18); // E<br>
yDefSprite(735,313,1,323,18); // F<br>
yDefSprite(736,325,1,337,18); // G<br>
yDefSprite(737,339,1,351,18); // H<br>
yDefSprite(738,353,1,357,18); // I<br>
yDefSprite(739,359,1,371,18); // J<br>
yDefSprite(740,373,1,387,18); // K<br>
yDefSprite(741,389,1,399,18); // L<br>
yDefSprite(742,401,1,421,18); // M<br>
yDefSprite(743,245,20,259,37); // N<br>
yDefSprite(744,261,20,273,37); // O<br>
yDefSprite(745,275,20,287,37); // P<br>
yDefSprite(746,289,20,301,39); // Q<br>
yDefSprite(747,303,20,315,37); // R<br>
yDefSprite(748,317,20,327,37); // S<br>
yDefSprite(749,329,20,341,37); // T<br>
yDefSprite(750,343,20,355,37); // U<br>
yDefSprite(751,357,20,369,37); // V<br>
yDefSprite(752,371,20,391,37); // W<br>
yDefSprite(753,393,20,405,37); // X<br>
yDefSprite(754,407,20,419,37); // Y<br>
yDefSprite(755,245,41,257,58); // Z<br>
<br>
yDefSprite(760,259,41,271,58); // a<br>
yDefSprite(761,273,41,285,58); // b<br>
yDefSprite(762,287,41,297,58); // c<br>
yDefSprite(763,299,41,311,58); // d<br>
yDefSprite(764,313,41,325,58); // e<br>
yDefSprite(765,327,41,337,58); // f<br>
yDefSprite(766,339,41,351,62); // g<br>
yDefSprite(767,353,41,365,58); // h<br>
yDefSprite(768,367,41,371,58); // i<br>
yDefSprite(769,373,41,383,62); // j<br>
yDefSprite(770,385,41,398,58); // k<br>
yDefSprite(771,400,41,404,58); // l<br>
yDefSprite(772,406,41,426,58); // m<br>
yDefSprite(773,245,64,257,81); // n<br>
yDefSprite(774,259,64,271,81); // o<br>
yDefSprite(775,273,64,285,85); // p<br>
yDefSprite(776,287,64,299,85); // q<br>
yDefSprite(777,301,64,311,81); // r<br>
yDefSprite(778,313,64,323,81); // s<br>
yDefSprite(779,325,64,333,81); // t<br>
yDefSprite(780,335,64,347,81); // u<br>
yDefSprite(781,349,64,361,81); // v<br>
yDefSprite(782,363,64,383,81); // w<br>
yDefSprite(783,385,64,397,81); // x<br>
yDefSprite(784,399,64,411,87); // y<br>
yDefSprite(785,413,64,425,81); // z<br>
<br>
yDefSprite(790,381,89,391,106); // -<br>
yDefSprite(791,393,89,399,106); // &quot;<br>
yDefSprite(792,401,89,405,106); // !<br>
yDefSprite(793,407,89,419,106); // ?<br>
yDefSprite(794,309,108,325,125); // &amp;<br>
yDefSprite(795,327,108,331,125); // .<br>
<br>
yDefSprite(800,201,229,426,314); //
BM98タイトルロゴ・大<br>
yDefSprite(801,1,269,181,385); // レコード盤<br>
<br>
yDefSprite(805,183,316,426,343); // 「SONG SELECT」タイトル<br>
yDefSprite(806,183,345,338,364); // for Single Play<br>
yDefSprite(807,183,366,338,385); // for Double Play<br>
yDefSprite(808,309,127,385,156); // Auto BMP counter!<br>
<br>
yDefSprite(810,112,192,164,244); // ヒト<br>
yDefSprite(811,166+23,192+9,192+23,218+9); //
★(中身塗りつぶし)<br>
yDefSprite(812,194+23,192+9,220+23,218+9); //
☆(中身空洞)<br>
<br>
yDefSprite(820,182,48,185,51); //
リザルト表示用・赤い四角<br>
yDefSprite(821,187,48,190,51); //
リザルト表示用・緑色四角<br>
yDefSprite(822,182,102,186,105); //
リザルト表示用・ボーダ<br>
// スクラッチオブジェから借用:p<br>
<br>
yDefSprite(830,102,1,105,89); // 左側用・小<br>
yDefSprite(831,107,1,110,89); // 右側用・小<br>
yDefSprite(832,102,91,105,266); // 左側用・大(1)<br>
yDefSprite(833,107,91,110,266); // 右側用・大(1)<br>
// yDefSprite(834,245,203,420,206); // 上側用・大<br>
// yDefSprite(835,245,208,420,211); // 下側用・大<br>
yDefSprite(834,245,203,245+120-1,206); // 上側用・大<br>
yDefSprite(835,245,208,245+120-1,211); // 下側用・大<br>
yDefSprite(836,387,135,402,150); // 左上コーナー<br>
yDefSprite(837,387,152,402,167); // 右上コーナー<br>
yDefSprite(838,387,169,402,184); // 左下コーナー<br>
yDefSprite(839,387,186,402,201); // 右下コーナー<br>
yDefSprite(840,102,91,105,91+140-1); // 左側用・大(2)<br>
yDefSprite(841,107,91,110,91+140-1); // 右側用・大(2)<br>
<br>
yDefSprite(842,102,91,105,266-10); // 左側用・大(3) for
result<br>
yDefSprite(843,107,91,110,266-10); // 右側用・大(3)<br>
<br>
// 白いアルファベット<br>
yDefSprite(850,1,91,9,108); // A<br>
yDefSprite(851,11,91,19,108); // B<br>
yDefSprite(852,21,91,29,108); // C<br>
yDefSprite(853,31,91,39,108); // D<br>
yDefSprite(854,41,91,48,108); // E<br>
yDefSprite(855,1,110,9,127); // F<br>
yDefSprite(856,11,110,19,127); // G<br>
yDefSprite(857,21,110,29,127); // H<br>
yDefSprite(858,31,110,33,127); // I<br>
yDefSprite(859,35,110,43,127); // J<br>
yDefSprite(860,45,110,53,127); // K<br>
yDefSprite(861,1,129,9,146); // L<br>
yDefSprite(862,11,129,21,146); // M<br>
yDefSprite(863,23,129,31,146); // N<br>
yDefSprite(864,33,129,41,146); // O<br>
yDefSprite(865,43,129,51,146); // P<br>
yDefSprite(866,1,148,9,165); // Q<br>
yDefSprite(867,11,148,19,165); // R<br>
yDefSprite(868,21,148,29,165); // S<br>
yDefSprite(869,31,148,39,165); // T<br>
yDefSprite(870,41,148,49,165); // U<br>
yDefSprite(871,1,167,9,184); // V<br>
yDefSprite(872,11,167,21,184); // W<br>
yDefSprite(873,23,167,31,184); // X<br>
yDefSprite(874,33,167,41,184); // Y<br>
yDefSprite(875,43,167,51,184); // Z<br>
yDefSprite(876,1,186,9,203); // &quot;/&quot;<br>
yDefSprite(877,11,186,13,203); // &quot;.&quot;<br>
yDefSprite(878,15,186,17,203); // &quot;!&quot;<br>
yDefSprite(879,19,186,27,203); // &quot;%&quot;<br>
yDefSprite(880,1,205,8,222); // 0<br>
yDefSprite(881,10,205,14,222); // 1<br>
yDefSprite(882,16,205,23,222); // 2<br>
yDefSprite(883,25,205,32,222); // 3<br>
yDefSprite(884,34,205,41,222); // 4<br>
yDefSprite(885,43,205,50,222); // 5<br>
yDefSprite(886,1,224,8,241); // 6<br>
yDefSprite(887,10,224,17,241); // 7<br>
yDefSprite(888,19,224,26,241); // 8<br>
yDefSprite(889,28,224,35,241); // 9<br>
<br>
// added by BM98v3.16<br>
yDefSprite(890,53,167,061,184); // @<br>
yDefSprite(891,29,186,37,203); // ?<br>
yDefSprite(892,39,186,41,203); // :<br>
yDefSprite(893,43,186,45,203); // ;<br>
yDefSprite(894,47,186,51,203); // [<br>
yDefSprite(895,53,186,57,203); // ]<br>
yDefSprite(896,52,205,60,222); // ^<br>
yDefSprite(897,37,224,40,241); // (<br>
yDefSprite(898,42,224,45,241); // )<br>
yDefSprite(899,47,224,51,241); // &quot;<br>
yDefSprite(900,53,224,54,241); // '<br>
yDefSprite(901,56,224,57,241); // |<br>
yDefSprite(902,59,224,61,243); // ,<br>
yDefSprite(903,1 ,243, 9,260); // _<br>
yDefSprite(904,11,243,19,260); // ~<br>
yDefSprite(905,21,243,28,260); // =<br>
yDefSprite(906,30,243,37,260); // -<br>
yDefSprite(907,39,243,47,260); // +<br>
yDefSprite(908,49,243,56,260); // *<br>
<br>
yDefSprite(910,245,185,270,201); // 1P<br>
yDefSprite(911,272,185,297,201); // 2P<br>
yDefSprite(912,299,185,324,201); // 暗い表示の「1P」<br>
yDefSprite(913,326,185,351,201); // 暗い表示の「2P」<br>
<br>
// ネオン系 B:Blue R:Red D:Dark T:Top C:Center B:Bottom<br>
for(i=0;i&lt;9;i++){<br>
yDefSprite(920+i,428,1+i*41,458,40+i*41);<br>
// RT,RC,RB,BT,BC,BB,DT,DC,DB<br>
}<br>
<br>
// 赤文字の小さいの(BPM用)<br>
yDefSprite(930,317,213,323,227); // 0<br>
for(i=931;i&lt;=939;i++){<br>
yDefSprite(i,245+(i-931)*8,213,251+(i-931)*8,227);<br>
}<br>
<br>
yDefSprite(940,112,246,157,267); // sakata<br>
<br>
for(i=0;i&lt;3;i++){<br>
yDefSprite(941+i,175,54+i*6,194,58+i*6); // 金色オブジェ<br>
}<br>
yDefSprite(944,154,66,173,70);<br>
yDefSprite(945,207,64,231,70);<br>
<br>
for(i=0;i&lt;6;i++){<br>
yDefSprite(946+i,166,192+i*6,185,196+i*6);<br>
// 946 赤・947 緑・948 灰・949 くろ・950 bm98・ 951金色<br>
}<br>
<br>
}</p>
<p> </p>
<p>基本的に、BMRでも、Extended Object/Chracterの機能は持たせるつもりではいるが、もうちょっと洗練されたものにする予定でいる。</p>
<p>なお、ここにある機能を使うと、曲データとして、BM98曲データフォーマットに準拠したものではなくなるため、他のBM98用のビュアー等で見ることができなくなることを、あらかじめお断りしておく。</p>
<p>以上。</p>
<p> </p>
<p><a href="http://www.sun-inet.or.jp/~yaneurao/">戻る</a></p>
</body>
</html>
@@ -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
}
@@ -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 ~
+17
View File
@@ -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)

After

Width:  |  Height:  |  Size: 865 B

+187
View File
@@ -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)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
<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-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
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
<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)
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
<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
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

After

Width:  |  Height:  |  Size: 4.9 KiB

+311
View File
@@ -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 = <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...
File diff suppressed because it is too large Load Diff
+5
View File
@@ -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)
+157
View File
@@ -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: *<gametype>*.ksf, or *<difficulty>_<playernumber>*.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 <piman@debian.org>. 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.
+11
View File
@@ -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.
+67
View File
@@ -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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.
Binary file not shown.
+651
View File
@@ -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
;
+337
View File
@@ -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:
<String> ::= a sequence of characters
<Float> ::= 0.0 to Inf, decimal value
<NegInt> ::= 0 | -1 | -2 | -3 ...
<PosInt> ::= 0 | 1 | 2 | 3 ...
Almost primitives:
<Whitespace> ::= (" " | "\t")+
<Newline> ::= "\n" | "\r\n" | "\r"
<LongString> ::= <String> (<Whitespace> <String>)*
<EndToken> ::= "end" <Newline>
<Int> ::= <NegInt> | <PosInt>
<Comment> ::= [("#" <LongString>) | <Whitespace>] <Newline>
Basic Structure:
<File> ::= <Metadata> [<TextSection>+] <StepSection>+
Metadata Storage:
<Metadata> ::= (<Comment> | <MetadataLine>)+ <EndToken>
<MetadataLine> ::= (<Filename> | <Title> | <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.
+24
View File
@@ -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/
-23
View File
@@ -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.
-14
View File
@@ -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!
-7
View File
@@ -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?
-21
View File
@@ -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)
-17
View File
@@ -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
-11
View File
@@ -1,11 +0,0 @@
////////////////////////////////////
// Miryokuteki's Todo/Done Record //
////////////////////////////////////
// Last Updated July 7th, 2003
Todo List:
<cleared>
Done as of 05/09/03:
<cleared>
-32
View File
@@ -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.
-4
View File
@@ -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.
-17
View File
@@ -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
-7
View File
@@ -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.
+14
View File
@@ -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
@@ -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)--
+26
View File
@@ -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
+125
View File
@@ -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]
@@ -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.
+127
View File
@@ -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).
+341
View File
@@ -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.
+13
View File
@@ -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 },
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 B

+92
View File
@@ -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 Santamaría 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
+40
View File
@@ -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...
BIN
View File
Binary file not shown.
+132
View File
@@ -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.
}
+20
View File
@@ -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.
+1
View File
@@ -0,0 +1 @@
lots of license documentation for something sm-ssc uses? it goes in here.
+473
View File
@@ -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>
+48
View File
@@ -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.
+49
View File
@@ -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.
+16
View File
@@ -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/
+15
View File
@@ -0,0 +1,15 @@
M+ FONTS Copyright (C) 2002-2007 M+ FONTS PROJECT
-
LICENSE_J
これらのフォントはフリー(自由な)ソフトウエアです。
あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、
複製、再配布することができますが、全て無保証とさせていただきます。
http://mplus-fonts.sourceforge.jp/
+62
View File
@@ -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>
+183
View File
@@ -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版) に、以下のパッチを当てて作成しています。これは、
・等幅フォントを必要とする環境で横幅がずれる
・埋め込まれたビットマップが有効にならない
という問題点を解決するためのものです。オリジナルの 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 だけ低かったことになる。
+160
View File
@@ -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+ M(Type-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
+25
View File
@@ -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

Some files were not shown because too many files have changed in this diff Show More