Initial commit.
@@ -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,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);
|
||||
}
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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?
|
||||
@@ -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
|
||||
|
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;
|
||||
|
||||
|
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;
|
||||
|
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;
|
||||
|
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;
|
||||
|
After Width: | Height: | Size: 35 KiB |
@@ -1,7 +0,0 @@
|
||||
#COURSE:All Challenge;
|
||||
#LIVES:4;
|
||||
#SONG:*:CHALLENGE;
|
||||
#SONG:*:CHALLENGE;
|
||||
#SONG:*:CHALLENGE;
|
||||
#SONG:*:CHALLENGE;
|
||||
#SONG:*:CHALLENGE;
|
||||
@@ -1,5 +0,0 @@
|
||||
#COURSE:All Music Random;
|
||||
#SONG:*:Medium:;
|
||||
#SONG:*:Medium:;
|
||||
#SONG:*:Medium:;
|
||||
#SONG:*:Medium:;
|
||||
@@ -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;
|
||||
@@ -1,5 +0,0 @@
|
||||
#COURSE:Players Worst;
|
||||
#SONG:WORST1:Medium;
|
||||
#SONG:WORST2:Medium;
|
||||
#SONG:WORST3:Medium;
|
||||
#SONG:WORST4:Medium;
|
||||
@@ -1,6 +0,0 @@
|
||||
#COURSE:Random Caprice;
|
||||
|
||||
#SONG:*:ANOTHER:showcourse;
|
||||
#SONG:*:ANOTHER:showcourse;
|
||||
#SONG:*:ANOTHER:showcourse;
|
||||
#SONG:*:ANOTHER:showcourse;
|
||||
@@ -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;
|
||||
@@ -1,5 +0,0 @@
|
||||
#COURSE:Tricky Random;
|
||||
#SONG:*:Medium:1.5x,reverse;
|
||||
#SONG:*:Medium:expand;
|
||||
#SONG:*:Medium:0.25x,dark;
|
||||
#SONG:*:Medium:sudden,land;
|
||||
@@ -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)
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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>
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
@@ -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)
|
||||
|
||||
@@ -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 -=-
|
||||
@@ -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.
|
||||
_____________________________________________________________________________
|
||||
@@ -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).
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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]
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
After Width: | Height: | Size: 124 B |
|
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>"BMS" means a Be-Music Source file. A file which has
|
||||
BMS suffix is regarded as the BMS file. This file format was
|
||||
produced by Urao Yane and NBK in 1998. And I adopted this file
|
||||
format to BM98. Now,anyone can use this format freely.</p>
|
||||
|
||||
<p>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</p>
|
||||
|
||||
<p><font color="#008080"><Command Line></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"><Header></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"><Channel Messages></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 : <message></p>
|
||||
|
||||
<p><font color="#008080"><a brief Channel Number></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"><Example></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 <SpriteNo.> <BMPNo.></p>
|
||||
|
||||
<p><start_x> <start_y> <end_x> <end_y></p>
|
||||
|
||||
<p>{ <offset_x> <offset_y> { <x> <y> } } </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 - " ! ? & .<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 <SpriteNo.> <BMPNo.> <start_x>
|
||||
<start_y> <end_x> <end_y> { <offset_x>
|
||||
<offset_y> { <x> <y> } } </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>そして、<offset_x> <offset_y>をオプションで指定できるが、これは、オブジェ位置を調整するためにある。</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<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); // 2<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); // 4<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<=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 & 2P "Great / Good / Bad / Poor "<br>
|
||||
// NoteSprite.h
|
||||
あっちゃで使うから、これ、使っちゃダメよん。<br>
|
||||
<br>
|
||||
// 312-315 : "1P","2P"<br>
|
||||
<br>
|
||||
// 316 - 325 : 縦小節線 (こっちの方が優先か...)<br>
|
||||
for(i=0;i<10;i++){<br>
|
||||
yDefSprite(316+i,64,91,64,91+(SCRDWN>>1)-1);<br>
|
||||
}<br>
|
||||
ySpriteMove(316,SCR1P3,0); // もう移動しといちゃえ!<br>
|
||||
ySpriteMove(317,SCR1P5,0); // もう移動しといちゃえ!<br>
|
||||
ySpriteMove(318,SCR1P6,0); // もう移動しといちゃえ!<br>
|
||||
ySpriteMove(319,SCR1P3,SCRDWN>>1); //
|
||||
もう移動しといちゃえ!<br>
|
||||
ySpriteMove(320,SCR1P5,SCRDWN>>1); //
|
||||
もう移動しといちゃえ!<br>
|
||||
ySpriteMove(321,SCR1P6,SCRDWN>>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<=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<6;i++){<br>
|
||||
ySpriteCopy(437+i,431+i);<br>
|
||||
ySpriteAdd(437+i,SCROFS,0);<br>
|
||||
} <br>
|
||||
<br>
|
||||
for(i=0;i<12;i++){<br>
|
||||
ySpriteCopy(443+i,431+i);<br>
|
||||
ySpriteAdd(443+i,0,SCRDWN>>1);<br>
|
||||
}<br>
|
||||
<br>
|
||||
// 455-497 : for displaying debug message(dup.)<br>
|
||||
// (455-486) : 画面フレーム他(定義は、BGScr.cpp)<br>
|
||||
// (487-497) : INSERT COIN & 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<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<=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<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); // "<br>
|
||||
yDefSprite(792,401,89,405,106); // !<br>
|
||||
yDefSprite(793,407,89,419,106); // ?<br>
|
||||
yDefSprite(794,309,108,325,125); // &<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); // "/"<br>
|
||||
yDefSprite(877,11,186,13,203); // "."<br>
|
||||
yDefSprite(878,15,186,17,203); // "!"<br>
|
||||
yDefSprite(879,19,186,27,203); // "%"<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); // "<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<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<=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<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<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
|
||||
}
|
||||
| ||||