Documentation clean up and optimized AutoGen

This commit is contained in:
Chris Danford
2002-10-24 01:51:01 +00:00
parent a53fe4ef0e
commit 57896611b9
13 changed files with 358 additions and 226 deletions
+276 -185
View File
@@ -36,7 +36,7 @@ Table of Contents
12. The StepMania Editor 12. The StepMania Editor
13. The .SM File Format 13. The .SM File Format
14. Backgrounds 14. Backgrounds
15. BGAnimations format 15. BGAnimations Format
16. The .CRS File Format 16. The .CRS File Format
17. Extra Stages 17. Extra Stages
18. Creating an Announcer 18. Creating an Announcer
@@ -92,10 +92,10 @@ and abort the installation.
4. Installation 4. Installation
************************************************************ ************************************************************
To install StepMania, download the file stepmania300xxxx.exe to a known To install StepMania, download the file stepmania300.exe to a known
location on your hard drive, then double-click the file icon to begin the location on your hard drive, then double-click the file icon to begin the
installation.The installer automatically remove an older version of the installation. The installer may prompt you to remove an older version of
program if one is present. The default installation directory is the program if one is present. The default installation directory is
'C:\Program Files\StepMania'. 'C:\Program Files\StepMania'.
@@ -133,6 +133,15 @@ In gameplay:
* F12 = increase BPM of current segment * F12 = increase BPM of current segment
* Hold Escape = abort playing * Hold Escape = abort playing
In editor:
* Escape = menu
* Up/Down = prev/next line
* Left/Right = change snap
* 1 through 0 = add/remove note
* Enter - Set selection begin marker
* Space - Set selection end marker
* P - Play back current selection (if no selection, play whole song)
* R - Record over current selection (if no selection, record whole song)
************************************************************ ************************************************************
6. How StepMania Loads Songs 6. How StepMania Loads Songs
@@ -167,9 +176,8 @@ If a song file does not specify a valid CDTitle file, StepMania will look
for a graphic in the song folder that contains the words "cdtitle". If that for a graphic in the song folder that contains the words "cdtitle". If that
search fails, StepMania will guess which image is most appropriate. search fails, StepMania will guess which image is most appropriate.
If a song file does not specify a valid movie background file, StepMania will If there is exactly one movie in the song folder, StepMania will insert a
look for a movie in the song folder that contains the letters "movie". If background change to that movie at the moment the music starts.
that search fails, StepMania will use the first movie in the song folder.
************************************************************ ************************************************************
@@ -220,6 +228,9 @@ PSXPAD 0.8.2002.0606b, found at
http://www.psxpad.com/download/downcnt.php?name=psxp_a020606b http://www.psxpad.com/download/downcnt.php?name=psxp_a020606b
StepMania now natively supports USB Pump It Up pads.
************************************************************ ************************************************************
8. Compatibility Issues 8. Compatibility Issues
************************************************************ ************************************************************
@@ -284,9 +295,9 @@ GeForce chip or an ATI Radeon chip.
3. Tweak the Display Resolution and Texture Resolution setting in the 3. Tweak the Display Resolution and Texture Resolution setting in the
GameOptions screen. GameOptions screen.
* Chris, will you tell me when the next version will be released? * Will you tell me when the next version will be released?
I'd rather not going to say. Sorry. It's gotten me in trouble before. Nope, Sorry. It's gotten me in trouble before.
* Why won't you tell me? I promise I won't tell anyone else. * Why won't you tell me? I promise I won't tell anyone else.
@@ -302,19 +313,21 @@ The StepMania package format was created to make the distribution of songs and
other add-ons very easy.  StepMania package files have the extension '.smzip' other add-ons very easy.  StepMania package files have the extension '.smzip'
and can be installed by double-clicking the .smzip file. and can be installed by double-clicking the .smzip file.
A StepMania package is 'installed' by extracting all files in the package to the A StepMania package is 'installed' by extracting all files in the package to
StepMania program directory. This allows songs, courses, themes, and the StepMania program directory. This allows songs, courses, themes, and
visualizations to all be installed by the Package Manager. visualizations to all be installed by the Package Manager.
The file format of an .smzip file is actually the PK-Zip standard.  This means The file format of an .smzip file is actually the PK-Zip standard.  This means
you can rename any .smzip file to have the extension '.zip', and then open the you can rename any .smzip file to have the extension '.zip', and then open the
file in any compression application (e.g. WinZip, WinRAR). file in any compression application (e.g. WinZip, WinRAR).
The StepMania Package Manager (smpackage.exe) can also export song packages The StepMania Package Exporter (smpackage.exe) can create packages of your
for you. Simply launch the Package Manager song, announcers, themes, or other add-ons. Simply launch the Package Exporter
(Start Menu->Programs->StepMania->Package Manager), click the items you would (Start Menu->Programs->StepMania->Package Exporter), click the items you would
like to make a package for, then click the Export button. A .smzip package like to make into a package, then click the one of the Export buttons.
will be placed on your desktop, and you can share it with friends. "Export as One" will take all of the selected items and make one package that
contains them all. "Export Individual" will create one separate package for
each selected item in the list.
************************************************************ ************************************************************
@@ -322,8 +335,8 @@ will be placed on your desktop, and you can share it with friends.
************************************************************ ************************************************************
If you have a question about or problem with StepMania, please first ask your If you have a question about or problem with StepMania, please first ask your
question a StepMania message board. A link is available from the StepMania question a StepMania message board. For a list of StepMania message boards,
web site - http://www.stepmania.com. see the web site - http://www.stepmania.com.
If you have found a bug, please file a bug report into the SourceForge bug If you have found a bug, please file a bug report into the SourceForge bug
tracking system (http://sourceforge.net/tracker/?group_id=37892&atid=421366).   tracking system (http://sourceforge.net/tracker/?group_id=37892&atid=421366).  
@@ -350,21 +363,21 @@ to the StepMania developers list ([email protected]) or to Chris
The StepMania editor allows you to edit, record, synchronize, and play back The StepMania editor allows you to edit, record, synchronize, and play back
note patterns. When you choose 'Save', your song will be saved in both the .SM note patterns. When you choose 'Save', your song will be saved in both the .SM
format and the DWI format for use in Dance With Intensity. If you save format and the DWI format for use in Dance With Intensity. If you save a song
a song that was originally in the BMS or KSF format, the old files will be that was originally in the BMS or KSF format, the old files will be appended
appended with ".old", and a new .SM file will be written with your new song with ".old", and a new .SM file will be written with your new song data.
data.
Following are a few basic commands that you will find useful in learning to use Following are a few basic commands that you will find useful in learning to use
the editor: the editor:
Esc - show/dimiss menu * Escape = menu
Up/Down - change beat * Up/Down = prev/next line
Left/Right - change beat snap value * Left/Right = change snap
Enter - Set selection begin marker * 1 through 0 = add/remove note
Space - Set selection end marker * Enter - Set selection begin marker
P - Play back current selection (if no selection, play whole song) * Space - Set selection end marker
R - Record over current selection (if no selection, record whole song) * P - Play back current selection (if no selection, play whole song)
* R - Record over current selection (if no selection, record whole song)
************************************************************ ************************************************************
@@ -372,15 +385,15 @@ R - Record over current selection (if no selection, record whole song)
************************************************************ ************************************************************
The .SM song file format was created to be one file format that supports all The .SM song file format was created to be one file format that supports all
game types that StepMania can play (dance, pump, beat, guitar, etc). The .SM game types that StepMania can play (dance, pump, beat, guitar, etc). The
file syntax is identical to DWI except for some different tags and meanings. syntax of a .SM is similar to .DWI and .KSF except that some tags are different.
These are a list of all supported tags.
All images can be in png, gif, jpg, or bmp format. All sounds can be in ogg, (Note that StepMania can load images can be in png, gif, jpg, or bmp format,
mp3, or wav format. and can load sounds in ogg, mp3, or wav format.)
#TITLE:...; - The "main title" of the song. #TITLE:...; - The "main title" of the song. (Support for UTF-8 foreign
characters coming soon)
#SUBTITLE:...; - This text will appear underneath the main title of the song #SUBTITLE:...; - This text will appear underneath the main title of the song
on the Select Music screen. e.g. "~Dirty Mix~" or "(remix)". on the Select Music screen. e.g. "~Dirty Mix~" or "(remix)".
#ARTIST:...; - The artist of the song. #ARTIST:...; - The artist of the song.
@@ -388,56 +401,70 @@ mp3, or wav format.
#SUBTITLETRANSLIT:...; - Transliteration of song's sub title for sorting #SUBTITLETRANSLIT:...; - Transliteration of song's sub title for sorting
#ARTISTTRANSLIT:...; - Transliteration of the artist of the song #ARTISTTRANSLIT:...; - Transliteration of the artist of the song
#CREDIT:...; - Give yourself some credit here for creating a wonderful song. #CREDIT:...; - Give yourself some credit here for creating a wonderful song.
#BPM:...; - BPM of the music
#BANNER:...; - The file name of the banner image. e.g. "b4u-banner.png". #BANNER:...; - The file name of the banner image. e.g. "b4u-banner.png".
This image must reside in the song folder. This image must reside in the song folder.
#BACKGROUND:...; - The file name of the background image. e.g. "b4u-bg.png". #BACKGROUND:...; - The file name of the background image. e.g. "b4u-bg.png".
This image must reside in the song folder. This image must reside in the song folder.
#CDTITLE:...; - The file name of the spinning CD logo. e.g. "b4u-cdtitle.png". #CDTITLE:...; - The file name of the spinning CD logo. e.g.
This image must reside in the song folder. "b4u-cdtitle.png". This image must reside in the song folder.
#MOVIEBACKGROUND:...; - The file name of the a background movie. e.g.
"b4u-movie.avi". This movie must reside in the song folder.
#MUSIC:...; - The file name of the music file. e.g. "b4u.mp3". This image #MUSIC:...; - The file name of the music file. e.g. "b4u.mp3". This image
must reside in the song folder. must reside in the song folder.
#MUSICBYTES:...; - The size in bytes of the music file that this song was last #OFFSET:...; - The time in seconds at which beat 0 occurs in the music.
synchronized with. A "Song may be out of synch" warning will be displayed if This is specified as a floating point value. e.g. "2.34".
the value of this tag does not match the actual size of the music file.
#OFFSET:...; - The time in seconds at which beat 0 occurs in the music. This
is specified as a floating point value. e.g. "2.34".
#SAMPLESTART:...; - The time in seconds to start the music sample that plays #SAMPLESTART:...; - The time in seconds to start the music sample that plays
on the Select Music screen. This is specified as a floating point value. on the Select Music screen. This is specified as a floating point value.
e.g. "32.34". e.g. "32.34".
#SAMPLELENGTH:...; - The time in seconds let the sample music play after #SAMPLELENGTH:...; - The time in seconds let the sample music play after
starting. This is specified as a floating point value. e.g. "32.34". Note starting. This is specified as a floating point value. e.g. "16.00".
that in the last 1 second of playing the music will fade out. Note that in the last 1 second of playing the music will fade out.
#SELECTABLE:...; - If "NO", the song can not be selected manually and can #SELECTABLE:...; - If "NO", the song can not be selected manually and can
only be played as part of a course. If "ROULETTE", the song can can also be only be played as part of a course. If "ROULETTE", the song can can also
selected via roulette. The default value is "YES". be selected via roulette. The default value is "YES".
#BPMS:...; - A value of the format "beat=bpm". Indicates that at 'beat', the #BPMS:...; - A value of the format "beat=bpm". Indicates that at 'beat', the
speed of the arrows will change to "bpm". Both of these values are specified speed of the arrows will change to "bpm". Both of these values are
as floating point values. You must specifiy a BPM value for beat 0. Multiple specified as floating point values. You must specifiy a BPM value for beat
BPMs can be given by separating them with commas. e.g. "0=160,120=80". 0. Multiple BPMs can be given by separating them with commas. e.g.
"0=160,120=80".
#STOPS:...; - A value of the format "beat=sec". Indicates that at 'beat', #STOPS:...; - A value of the format "beat=sec". Indicates that at 'beat',
the motion of the arrows should stop for "sec" seconds. Both of these values the motion of the arrows should stop for "sec" seconds. Both of these
are specified as floating point values. Multiple stops can be given by values are specified as floating point values. Multiple stops can be given
separating them with commas. e.g. "60=2.23,80=1.12". by separating them with commas. e.g. "60=2.23,80=1.12".
#BGCHANGE:...; - A value of the format "beat=bg name". Indicates that at 'beat', #BGCHANGE:...; - A value of the format "beat=bg name". Indicates that at
the background should begin playing 'bg name'. 'beat' is a fractional value 'beat', the background should begin playing a new background named 'bg name'.
value and 'anim name' is a string. Different animation change are separated 'beat' is a fractional value value and 'anim name' is a string. Different
by commas. e.g. "60=falling,80=flower". animation change are separated by commas. e.g. "60=falling,80=flower".
When StepMania looks for a backgound, it searches in this order:
- Looks for a movie with file name "bg name" in the song folder
- Looks for a BGAnimation folder with the name "bg name" in the song
folder.
- Looks for a movie with file name "bg name" in the RandomMovies folder.
- Looks for a BGAnimation with file name "bg name" in the BGAnimations
folder.
- Looks for a Visualization with the file name "bg name" in the
Visualizations folder.
For example, suppose you have a song B4U and special B4U-specific
BGAnimations called "robot" and "electric". First, move the robot and
electric BGAnimation folders into the B4U song folder
(e.g. Songs\4th Mix\B4U\robot and Songs\4th Mix\B4U\electric). Then,
using the editor, insert a new background change at each point in the song
where you to switch to a new BGAnimation. When prompted for the name of
the background change, you could type either "robot" or "electric".
Each pattern of notes has have the same basic format:
Each pattern of notes has the same basic format:
#NOTES:<NotesType>:<Description>:<DifficultyClass>:<DifficultyMeter>:<RadarValues>:<NoteData>; #NOTES:<NotesType>:<Description>:<DifficultyClass>:<DifficultyMeter>:<RadarValues>:<NoteData>;
NotesType: Must be one of the currently supported types in StepMania: NotesType: Must be one of the currently supported types in StepMania:
"dance-single", "dance-double", "dance-couple", "dance-solo", "pump-single", "dance-single", "dance-double", "dance-couple", "dance-solo", "pump-single",
"pump-double". "pump-double", "pump-couple", "ez2-single", "ez2-double", "ez2-real",
"para-single"
Description: This will be displayed on the gameplay screen. This can be any Description: This will be displayed on the gameplay screen. This can be any
text, but is most commonly "Basic", "Another", "Trick", "Standard", "SSR", text, but is most commonly:
"Maniac", "Heavy", or "Challenge". "Basic", "Another", "Trick", "Standard", "SSR", "Maniac", "Heavy", "Challenge",
"SManaic"
DifficultyClass: This value must be "easy", "medium", or "hard". These values DifficultyClass: This value must be "easy", "medium", or "hard". These values
correspond the levels of difficulty on the Select Difficulty screen. correspond the levels of difficulty on the Select Difficulty screen.
@@ -475,6 +502,12 @@ dance-couple = 8 notes/row
dance-solo = 6 notes/row dance-solo = 6 notes/row
pump-single = 5 notes/row pump-single = 5 notes/row
pump-double = 10 notes/row pump-double = 10 notes/row
pump-couple = 10 notes/row
ez2-single = 5 notes/row
ez2-double = 10 notes/row
ez2-real = 7 notes/row
para-single = 5 notes/row
Note rows are grouped into measures. The number of note rows you specify in a Note rows are grouped into measures. The number of note rows you specify in a
measure will determine the time value of each note. For example, if there are measure will determine the time value of each note. For example, if there are
@@ -505,26 +538,27 @@ Example:
14. Backgrounds 14. Backgrounds
************************************************************ ************************************************************
StepMania supports three different modes of backgrounds: StepMania supports three different modes of backgrounds. The default
background mode can be set in the Graphic Options menu.
BGAnimations - The background will cycle randomly through different sprite BGAnimations - Sprite animations similar to DDR 1st-5th Mix. There must be
animations. Each of these animation must reside in the "BGAnimations" BGAnimation folders present in the BGAnimations directory, or else no
folder in the StepMania program directory. See the section called background will be played. See the section called "BGAnimations Format"
"BGAnimations" in the readme for more information on the BGAnimations format. in this document for more information on the BGAnimations format.
BGAnimations will perform better than the other background modes on slower BGAnimations will perform better than the other background modes on slower
computers. computers.
Random Movies - The background will cycle randomly over any avi or mpg files Random Movies - The background will cycle randomly over any avi or mpg files
in the "RandomMovies" folder in the StepMania program directory. in the "RandomMovies" folder in the StepMania program directory.
Visualizations - A random avi or mpg file will be chosen from the Visualizations - A random avi or mpg file will be chosen from the
"Visualizations" folder in the StepMania program directory. This movie file "Visualizations" folder in the StepMania program directory. This movie
will be played and blended over top of the song's background graphic. file will be played and blended over top of the song's background graphic.
Many video AVIs will require the DivX codec for playback. If you haven't yet Many video AVIs will require the DivX codec for playback. If you haven't yet
downloaded DivX, you can get it from www.divx.com. Playing movies as the downloaded DivX, you can get it from www.divx.com. Playing movies as the
background is very processor intensive, and may cause the frame rate to background is very processor intensive, and may cause choppiness on slower
decrease on slower computers. computers.
Sample animations, visualizations, and random movies can be found at Sample animations, visualizations, and random movies can be found at
www.stepmania.com. www.stepmania.com.
@@ -543,7 +577,8 @@ BGAnimation folders.
<layer files> are one or more graphics files that will be used as layers in the <layer files> are one or more graphics files that will be used as layers in the
animation. Each sprite represents exactly one layer. Multiple layers can be animation. Each sprite represents exactly one layer. Multiple layers can be
specified by having multiple <layer files>. specified by having multiple <layer files>. Layer files can be PNG, AVI, or
MPEG files.
For example, a BGAnimation named "flower" may include the files: For example, a BGAnimation named "flower" may include the files:
@@ -551,9 +586,9 @@ For example, a BGAnimation named "flower" may include the files:
BGAnimations\flower\2 StartOnRandomFrame ParticlesFloatDown 1x2.png BGAnimations\flower\2 StartOnRandomFrame ParticlesFloatDown 1x2.png
BGAnimations\flower\3 TileScrollLeft CycleColor 2x2.png BGAnimations\flower\3 TileScrollLeft CycleColor 2x2.png
The first number in the name of a <layer file> will specifies its drawing The layers of a BGAnimation are drawn from bottom in the order in which the
order. A layers with a small number will be drawn before a layer with a larger layer graphics files appear alphanumerically. A layer file name will often
number. begin with a number to control the order in which they are drawn.
Different "effects" are specified for each layer by adding tokens to the file Different "effects" are specified for each layer by adding tokens to the file
name. Here are an explanation of the currently supported tokens: name. Here are an explanation of the currently supported tokens:
@@ -632,8 +667,8 @@ files must reside in the "Courses" folder in the StepMania program folder.
modifiers - One or more of: modifiers - One or more of:
0.5x, 0.75x, 1.5x, 2.0x, 3.0x, 4.0x, 5.0x, 8.0x 0.5x, 0.75x, 1.5x, 2.0x, 3.0x, 4.0x, 5.0x, 8.0x
boost, wave, drunk, dizzy, space, mini boost, wave, drunk, dizzy, space, mini
hidden, sudden, stealth hidden, sudden, stealth, blink
mirror, left, right, shuffle mirror, left, right, shuffle, supershuffle
little little
reverse reverse
note, flat, plain note, flat, plain
@@ -650,10 +685,12 @@ files must reside in the "Courses" folder in the StepMania program folder.
************************************************************ ************************************************************
You can manually specify extra stages for each song group by creating .CRS You can manually specify extra stages for each song group by creating .CRS
files called "extra1.crs" and "extra2.crs". These courses must contain files called "extra1.crs" and "extra2.crs" and placing them in the song group
exactly one song in the course. Don't forget to specify modifiers - see the folder (e.g. Songs\MAX2\extra1.crs). When it comes time to play an extra stage
CRS File Format section for more information. If a CRS file is not found or the first song in the .crs file will be used. Don't forget to specify
is invalid, the program will choose an appropriate song, notes, and modifiers. modifiers - see the "CRS File Format" section of this document for more
information. If a CRS file is not found or is invalid, the program will
choose an appropriate song, notes, and modifiers.
Don't forget: extra stage CRS files belong in the song group folder Don't forget: extra stage CRS files belong in the song group folder
(e.g. "Songs/DDRMAX/"), not in "Courses". (e.g. "Songs/DDRMAX/"), not in "Courses".
@@ -665,10 +702,10 @@ Don't forget: extra stage CRS files belong in the song group folder
Announcers folders must reside in the "Announcers" folder inside the Announcers folders must reside in the "Announcers" folder inside the
StepMania program directory (e.g. "Announcers\DDRMAX\"). An announcer folder StepMania program directory (e.g. "Announcers\DDRMAX\"). An announcer folder
contains several more folders - one for each announcer "trigger". You can contains several more folders - one for each announcer "trigger". Add as many
place as many .WAV, .MP3, or .OGG sounds as you want in a trigger folder. .WAV, .MP3, or .OGG sounds as you want to the trigger folder. When StepMania
When StepMania wants to play a sound for that trigger, it will play a wants to play a sound for that trigger, it will play a random sound file from
random sound file from your trigger folder. your trigger folder.
Sound files in a trigger folder can have any name you want. It's recommended Sound files in a trigger folder can have any name you want. It's recommended
that you name the sound files according to what is being said (e.g. that you name the sound files according to what is being said (e.g.
@@ -676,106 +713,177 @@ that you name the sound files according to what is being said (e.g.
folder, or the trigger folder is missing, then no sound will be played for folder, or the trigger folder is missing, then no sound will be played for
that trigger. that trigger.
For a complete list of announcer trigger names, see the example announcer packs
that are available at www.stepmania.com.
************************************************************ ************************************************************
18. Creating a Note Skin 18. Creating a Note Skin
************************************************************ ************************************************************
Note skins allow you to customize the way notes appear. Note skins must Note skins allow you to customize the way notes appear. Note skins must
reside in the folder "Skins\(Game Name)\(Note Skin Name)". Note skins are reside in the folder "NoteSkins\<Game Name>\<Note Skin Name>". Note skins are
specific to a particular game (dance, pump, etc). In the note skin folder, specific to a particular game (dance, pump, etc). In the note skin folder,
you must implement the folling files for each note: you must implement the folling files for each note:
<NoteName> Receptor (NxN).<png|gif|jpg|bmp> <NoteName> receptor (2x1).png
<NoteName> Note color part (NxN).<png|gif|jpg|bmp> <NoteName> tap parts (2xN).png
<NoteName> Note gray part (NxN).<png|gif|jpg|bmp> <NoteName> tap explosion bright (NxN).png
<NoteName> Hold Explosion (NxN).<png|gif|jpg|bmp> <NoteName> tap explosion dim (NxN).png
<NoteName> Tap Explosion Bright (NxN).<png|gif|jpg|bmp> <NoteName> note color part (NxN).png
<NoteName> Tap Explosion Dim (NxN).<png|gif|jpg|bmp> <NoteName> note gray part (NxN).png
<NoteName> Hold.colors <NoteName> hold parts (4x2).png
<NoteName> Tap.colors <NoteName> hold explosion (NxN).png
<NoteName> tap.colors
"<NoteName>" must be the name of the note (e.g. "left", "upright", "snare"). "<NoteName>" must be the name of the note (e.g. "left", "upright", "snare").
Look at the example note skins included with StepMania for a complete list Look at the example note skins included with StepMania for a complete list
for each game. for each game.
"NxN" is an optional string that specifies the dimensions of the graphic. Most of the note skin elements can use any number of frames. For example, the
For example, if there are 6 frames, 3 wide 2 high, in your color part element "tap exposion bright" could have 4 frames (2x2), 2 frames (1x2), or
animation, then you might use the file name "Up Note color part 3x2.png". just a single frame. The exception to this rule is "tap parts" which must
be 2 frames wide, and hold parts which must be 4x2.
For more information on about textures with multiple frames, see the section
"How StepMania Loads Textures" in this document.
For more information on about graphics loading, see the section "How
StepMania Loads Textures".
************************************************************ ************************************************************
19. Creating a Theme 19. Creating a Theme
************************************************************ ************************************************************
Themes must reside in the Themes folder in the StepMania program directory. All themes must reside in the Themes folder below the StepMania program
Inside each theme folder, there are up to three directories: "graphics", directory. Inside a theme folder, you will all or only a few of the items
"sounds", and "fonts". below:
Graphics may be .sprites or any file format described in the section "How Themes\<ThemeName>\BGAnimations\
StepMania Loads Textures". Sounds can be in .mp3, .ogg, or .wav. Fonts Themes\<ThemeName>\Fonts\
must use the .font file format. Themes\<ThemeName>\Graphics\
Themes\<ThemeName>\Numbers\
Themes\<ThemeName>\Sounds\
Themes\<ThemeName>\metrics.ini\
When StepMania looks to load a font element (graphic, sound, font), it The 5 possible folders in a theme hold "theme elements". A theme element is
first looks in the current theme folder for the element. If that element simply a little piece of the theme that can be changed. Each of the 5 folders
cannot be found, it will fall back to using the element in the theme named contains different types of information as explained below:
"default". "default" is sort of a base theme and should not be modified.
This system allows user-made themes to override as little or as many theme BGAnimations: This folder contains BGAnimation elements for the different
elements as they want. For example, you could create a theme that does screens. Since all backgrounds for all the menus in the game are generated
nothing more than override the title menu logo. Such a theme would contain using BGAnimations, any screen in the game can have an animating
only one folder ("Graphics") and one file ("Graphics\title menu logo.png"). background. Also, BGAnimations can contain movie layers. For more
information about BGAnimations, see the section "BGAnimations Format" in
this document.
Fonts: This folder contains graphics and font width data used by the font
system. Font graphics and width files are generated using the program
"Bitmap Font Builder", which is available for download at
http://www.lmnopc.com/bitmapfontbuilder/. To export a font for use in
StepMania:
- In Bitmap Font Builder, choose Character Set->Full ASCII. StepMania
can only load 16x16 character sheets.
- In Bitmap Font Builder, click File->Save 32bit TGA. Save the file
some place that is easy to access.
- Open Photoshop and load the TGA file. Click the chanel "Alpha 1",
then load this channel as a selection.
- Click back to the Layers tab and create a new layer.
- Choose Edit->Fill, and fill the selection with white.
- Delete the layer named "Background". You should now see a mostly
transparent background with faint hints of white text.
- Click File->Save For Web. Choose the Format "PNG-24" and Save.
- Rename the PNG file you just saved to "<YourFontName> 16x16.png".
(the "16x16" means that the graphic contains 16 * 16 frames worth
of characters.
- Back in Bitmap Font Builder, click File->
"Save Font Widths (INI Format)". Save this in the same directory
where you saved the PNG. Rename the exported INI file to
"<YourFontName> 16x16.ini" where the first part of the file name
matches the PNG you exported.
- Done! The PNG and the INI file are your new font. Move them into
your theme's Fonts folder.
StepMania will also look for the following optional lines in a font INI
file:
CapitalsOnly=<0|1>: If 1, then StepMania will use the capital letter
frames in place of the lower case letter frames. If not
specified, StepMania will use 0 for this value.
DrawExtraPixelsLeft=<0..32>: If letters of your font are being chopped
off on the left size, try increasing this value. If not
specified, StepMania will use 0 for this value.
DrawExtraPixelsRight=<0..32>: If letters of your font are being chopped
off on the right size, try increasing this value. If not
specified, StepMania will use 0 for this value.
AddToAllWidths=<0..32>: The value in this line will be added to the
width of every character in the font. Increase this value to
increase character spacing in your font. This feature is also
useful if you wish to add a black border the characters of your
font. If not specified, StepMania will use 0 for this value.
ScaleAllWidthsBy=<0.0...2.0>: The width of every character in the font
be multipled by this value. If not specified, StepMania will use
1 for this value.
LineSpacing=<0..64>: This controls the spacing in pixels between lines
text. This value is only used in text items that have multiple
lines. If not specified, StepMania will use the height of the
frames in your texture (which is 32 pixels for 512x512 graphics).
Graphics: This folder contains graphics used in all of the screens. These
graphics are the meat and potatoes of a theme. These graphics can be of
any dimension. For example, your theme could have a "title menu logo
dance.png" graphic that is 640x480 - which would take up the whole screen!
Numbers: This folder contains graphics used to render numbers. Every graphic
in this folder must be 5 frames by 3 frames (5x3) and follow the standard
layout (see the Numbers graphics in the theme named "default" for
examples).
Sounds: This folder contains sounds. Sounds may be in OGG, MP3, or WAV
format.
metrics.ini: A metric is simply a values that can alter the appearance
of the game. metrics.ini is a large list of values that will allow you
to alter things like the position of elements in the menus, and the order
of menu screens. There is no documentation or explaination of these values
other than the value name. Because the theme "default" implements all
possible theme elements and metrics, the metrics file
"Themes\default\metrics.ini" contains a complete list of all possible
metrics. DO NOT EDIT the file "Themes\default\metrics.ini". Instead,
create a blank file "metrics.ini" in your theme folder, and override only
those values you want to customize for your theme using default's
metrics.ini to see what values are possible.
> What's in a .font file? When StepMania looks to load a theme element from one of these folders, it
will first look in the folder of the currently selected theme. If the element
is not found in this folder, StepMania then look for the theme element in the
theme folder called "default". The theme "default" is a base theme and
guaranteed that a theme is usable even if it is missing elements.
Example: This "fallback" system has other advantages too. User-created themes, can
override as many or as few theme elements as the author pleases. For example,
you could create a theme called "MySuperTheme" which does nothing more than
override the title menu logo. Here's how you would create this theme:
- Create a new folder in "Themes" called "MySuperTheme"
- Open the MyStepMania folder. Create a folder inside called "Graphics".
- Copy the file "Themes\default\Graphics\title menu logo dance.png" into your
Graphics folder "Themes\MySuperTheme\Graphics".
- Edit your new title menu graphic to be whatever you want.
- Start StepMania, go to Appearance Options, and change your theme to
"MySuperTheme".
[Font]
Texture=Score Numbers 7x2.png
Widths=5,8,10,17,15,18,15,6,9,9,8,14,5,9
Characters=01234 :56789~.
CapitalsOnly=0
DrawExtraPercent=0.1
Texure: File name of texture file. Must be in same directory as .font file.
Font graphics can be generated by the program Bitmap Font Buider
(http://www.lmnopc.com/bitmapfontbuilder/).
Width: The width in pixels of the character in each frame of the texture.
Characters are specified in a left-to-right, top-to-bottom ordering.
Characters: The characters corresponding to each frame in the texture.
Characters are specified in a left-to-right, top-to-bottom ordering.
CapitalsOnly: 0=false, 1=true. Use "1" if this font implements only
capital letters.
DrawExtraPercent: A number between 0.0 and 1.0 specifying the maximum
amount in percentage of the frame width that a character can hang over
its width. Many italic fonts hang a actually a little bit wider than
base of the characer because of skewing. For these types of font, the
DrawExtraPercent should be > 0. This value takes some playing around with.
************************************************************ ************************************************************
20. How StepMania Loads Textures 20. How StepMania Loads Textures
************************************************************ ************************************************************
> What are textures? * What are textures?
"Texture" is simply another name for graphics file. The name "texture" "Texture" is simply another name for graphics file. The name "texture"
is more common when taking about 3D graphics. This document uses "texture" is more common when taking about 3D graphics. This document uses "texture"
and "graphic" interchangably. and "graphic" interchangably.
> What types of graphics can StepMania read:
StepMania can use any of the following graphics formats as textures: * How to you specify that a texture has multiple frames (for animation)?
png, gif, jpg, bmp, avi, mpg, mpeg. StepMania looks for textures on disk
only by looking at file name minus the extension. For example, when
StepMania wants to load the graphic "title menu logo", it will first look
for "title menu logo.png", then "title menu logo.gif", ... then "title
menu logo.mpeg".
> How to you specify multiple frames in an animation?
Simply add the string "(NxN)". Immediately before the "." that separates Simply add the string "(NxN)". Immediately before the "." that separates
the main file name and the extension. For example, suppose there is a file the main file name and the extension. For example, suppose there is a file
@@ -785,7 +893,8 @@ and 3 frames high. Name this file, "title menu logo 3x3.png", and stepmania
will play the graphic as an animation with frames in the order left-to-right, will play the graphic as an animation with frames in the order left-to-right,
top-to-bottom, with 0.20 seconds separating each frame. top-to-bottom, with 0.20 seconds separating each frame.
> What are .sprite files?
* What are .sprite files?
.sprite files are a way to have even more precise control over how your .sprite files are a way to have even more precise control over how your
graphics animate. Each sprite has multiple "states". For each state, you graphics animate. Each sprite has multiple "states". For each state, you
@@ -795,12 +904,13 @@ this state before moving to the next state.
Let's look at an example .sprite file: Let's look at an example .sprite file:
[Sprite] [Sprite]
Texture=dancer p1 8x4.png Texture=dancer p1 1x3.png
Frame0000=0 Frame0000=0
Delay0000=0.05 Delay0000=0.05
Frame0001=1 Frame0001=1
Delay0001=0.05 Delay0001=0.05
Frame0002=2 Frame0002=2
Delay0002=0.05
Texture is the name of the texure file to use. This must reside in the same Texture is the name of the texure file to use. This must reside in the same
directory as the .sprite file. If your texture has multiple frames, be sure directory as the .sprite file. If your texture has multiple frames, be sure
@@ -814,44 +924,23 @@ Frame indicies move left-to-right, top-to-bottom over the frames in an image.
DelayNNNN is the time in seconds to show the state. DelayNNNN is the time in seconds to show the state.
> My graphics show ugly banding or look washed out. What can I do? * My graphics show ugly banding or look washed out. What can I do?
You can use texture hints to have more precise control over how your graphics StepMania will soon dither all textures by defaul, thus making the current
are storred on the graphics card. texture hint system obsolte.
All are textures loaded by StepMania are 16-bits. The default the texture
format is 4444 (4 bits for R,G,B, 4 bits for alpha), which can cause some
banding artifacts or a washed-out look. You can change the texture format by
adding "hints" to the file name. Hints:
"no alpha" - This will force a 5650 texture format (5 bits for R, 6 for G, 5 * Why do the graphics look so blurry?
for B, 0 for alpha). 5650 textures cannot have transparency, but have much
better color fidelity.
"1 alpha" - This will force a 5551 texture format. If your graphic has only
"on or off" alpha (like a GIF file), use this hint for better color fidelity.
"dither" - This will dither an image upon load. Dithering will reduce banding,
but can cause transparency artifacts.
Hints can be placed anywhere in the file name, but are usually placed at the Some 3D graphics cards (the Voodoo3 in particular) do not support textures
end of a file name in parenthesis. For example: greater in size than 256x256. If a texture is larger than the card's maximum
texture size, the image will scaled down internally resulting in output that
looks blurry. Here are some hints for optimum image quality:
caution (dither, no alpha).png - Keep your images to dimensions smaller or equal to 256x256.
Arrows Left 1x4 (1 alpha).png - Make your images have an even number for each dimension (e.g. 286x120 is
will appear less blurry than 285x119).
> Why do the graphics look so blurry?
Some 3D graphics cards (the Voodoo3 in particular) cannot handles textures >
256x256. If a texture is larger than the card's maximum texture size, the
image will scaled down internally. Since the card is using a low-resolution
version internally, the output, when scalled back to the original image size,
will be blurry.
Whenever possible:
* Keep your images to dimensions smaller or equal to 256x256.
* Make your images have an even number for each dimension (e.g. 286x120 is
will appear less blurry than 285x119). The reason behind this has to do with
how 3D accelerators represent screen coordinates with floating point numbers,
not integers.
************************************************************ ************************************************************
21. Building StepMania from CVS source 21. Building StepMania from CVS source
@@ -947,6 +1036,7 @@ creates your home directory and is required for things to start working.
* Done! Enjoy staying on the bleeding edge of StepMania releases!  * Done! Enjoy staying on the bleeding edge of StepMania releases! 
************************************************************ ************************************************************
22. Thanks 22. Thanks
************************************************************ ************************************************************
@@ -956,6 +1046,7 @@ Thanks to:
Dj Slash & Tony Thai for the caution graphic Dj Slash & Tony Thai for the caution graphic
Kyle "KeeL" Ward for his awesome menu music (www.ampcast.com/keel) Kyle "KeeL" Ward for his awesome menu music (www.ampcast.com/keel)
************************************************************ ************************************************************
End of document End of document
************************************************************ ************************************************************
+8 -2
View File
@@ -75,13 +75,13 @@ CString AnnouncerManager::GetPathTo( CString sFolderName )
if( m_sCurAnnouncerName!="" && !DoesFileExist(sPathToFolderCurrent) ) if( m_sCurAnnouncerName!="" && !DoesFileExist(sPathToFolderCurrent) )
{ {
LOG->Trace( "The current announcer is missing the folder '%s'.", sFolderName ); LOG->Trace( "The current announcer is missing the folder '%s'.", sFolderName );
MessageBeep( MB_OK ); // MessageBeep( MB_OK );
CreateDirectories( sPathToFolderCurrent ); CreateDirectories( sPathToFolderCurrent );
} }
if( !DoesFileExist(sPathToFolderEmpty) ) if( !DoesFileExist(sPathToFolderEmpty) )
{ {
LOG->Trace( "The empty announcer is missing the folder '%s'.", sFolderName ); LOG->Trace( "The empty announcer is missing the folder '%s'.", sFolderName );
MessageBeep( MB_OK ); // MessageBeep( MB_OK );
CreateDirectories( sPathToFolderEmpty ); CreateDirectories( sPathToFolderEmpty );
CreateDirectories( sPathToFolderEmpty ); CreateDirectories( sPathToFolderEmpty );
} }
@@ -90,3 +90,9 @@ CString AnnouncerManager::GetPathTo( CString sFolderName )
return sPathToFolderCurrent; return sPathToFolderCurrent;
} }
bool AnnouncerManager::HasSoundsFor( CString sFolderName )
{
CStringArray asFileNames;
GetDirListing( GetPathTo(sFolderName), asFileNames );
return asFileNames.GetSize() > 0;
}
+1
View File
@@ -25,6 +25,7 @@ public:
CString GetCurAnnouncerName() { return m_sCurAnnouncerName; }; CString GetCurAnnouncerName() { return m_sCurAnnouncerName; };
CString GetPathTo( CString sFolderName ); CString GetPathTo( CString sFolderName );
bool HasSoundsFor( CString sFolderName );
protected: protected:
static CString GetAnnouncerDirFromName( CString sAnnouncerName ); static CString GetAnnouncerDirFromName( CString sAnnouncerName );
+19 -7
View File
@@ -151,10 +151,10 @@ void Background::LoadFromSong( Song* pSong )
// movies in RandomMovies dir, BGAnims in BGAnimsDir. // movies in RandomMovies dir, BGAnims in BGAnimsDir.
CStringArray asFiles; CStringArray asFiles;
// Look for movies in the song dir // Look for BG movies in the song dir
GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".avi", asFiles, false, true ); GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true );
GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".mpg", asFiles, false, true ); GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true );
GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".mpeg", asFiles, false, true ); GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true );
if( asFiles.GetSize() > 0 ) if( asFiles.GetSize() > 0 )
{ {
pTempBGA = new BGAnimation; pTempBGA = new BGAnimation;
@@ -178,9 +178,9 @@ void Background::LoadFromSong( Song* pSong )
} }
// Look for movies in the RandomMovies dir // Look for movies in the RandomMovies dir
GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".avi", asFiles, false, true ); GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true );
GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".mpg", asFiles, false, true ); GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true );
GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".mpeg", asFiles, false, true ); GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true );
if( asFiles.GetSize() > 0 ) if( asFiles.GetSize() > 0 )
{ {
pTempBGA = new BGAnimation; pTempBGA = new BGAnimation;
@@ -203,6 +203,18 @@ void Background::LoadFromSong( Song* pSong )
continue; // stop looking for this background continue; // stop looking for this background
} }
// Look for BGAnims in the BGAnims dir
GetDirListing( VISUALIZATIONS_DIR+aniseg.m_sBGName, asFiles, false, true );
if( asFiles.GetSize() > 0 )
{
pTempBGA = new BGAnimation;
pTempBGA->LoadFromVisualization( asFiles[0], sSongBackgroundPath );
m_BGAnimations.Add( pTempBGA );
m_aBGSegments.Add( BGSegment(aniseg.m_fStartBeat, m_BGAnimations.GetSize()-1, bFade) ); // add to the plan
continue; // stop looking for this background
}
// if we make it here, ignore the background change // if we make it here, ignore the background change
} }
+1 -1
View File
@@ -69,7 +69,7 @@ enum NotesType
NOTES_TYPE_EZ2_SINGLE, NOTES_TYPE_EZ2_SINGLE,
NOTES_TYPE_EZ2_DOUBLE, NOTES_TYPE_EZ2_DOUBLE,
NOTES_TYPE_EZ2_REAL, NOTES_TYPE_EZ2_REAL,
NOTES_TYPE_PARA, NOTES_TYPE_PARA_SINGLE,
NUM_NOTES_TYPES, // leave this at the end NUM_NOTES_TYPES, // leave this at the end
NOTES_TYPE_INVALID, NOTES_TYPE_INVALID,
}; };
+5 -1
View File
@@ -915,7 +915,7 @@ StyleDef g_StyleDefs[NUM_STYLES] =
true, // m_bUsedForGameplay true, // m_bUsedForGameplay
true, // m_bUsedForEdit true, // m_bUsedForEdit
"single", // m_szName "single", // m_szName
NOTES_TYPE_PARA, // m_NotesType NOTES_TYPE_PARA_SINGLE, // m_NotesType
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
{ 320, 320 }, // m_iCenterX { 320, 320 }, // m_iCenterX
5, // m_iColsPerPlayer 5, // m_iColsPerPlayer
@@ -1373,6 +1373,10 @@ NotesType GameManager::StringToNotesType( CString sNotesType )
if( sNotesType == "ez2-single-hard" ) if( sNotesType == "ez2-single-hard" )
sNotesType = "ez2-single"; sNotesType = "ez2-single";
// HACK! "para-single" used to be called just "para"
if( sNotesType == "para" )
sNotesType = "para-single";
for( int i=0; i<NUM_NOTES_TYPES; i++ ) for( int i=0; i<NUM_NOTES_TYPES; i++ )
if( NotesTypes[i].name == sNotesType ) if( NotesTypes[i].name == sNotesType )
return NotesType(i); return NotesType(i);
+1 -1
View File
@@ -42,7 +42,7 @@ char NotesWriterDWI::NotesToDWIChar( bool bCol1, bool bCol2, bool bCol3, bool bC
if( l.bCol[0]==bCol1 && l.bCol[1]==bCol2 && l.bCol[2]==bCol3 && l.bCol[3]==bCol4 && l.bCol[4]==bCol5 && l.bCol[5]==bCol6 ) if( l.bCol[0]==bCol1 && l.bCol[1]==bCol2 && l.bCol[2]==bCol3 && l.bCol[3]==bCol4 && l.bCol[4]==bCol5 && l.bCol[5]==bCol6 )
return l.c; return l.c;
} }
ASSERT(0); // if we assert here, we didn't find the row in the DWI char lookup above. It must be missing an entry. LOG->Warn( "Failed to find the DWI character for the row %d %d %d %d %d %d", bCol1, bCol2, bCol3, bCol4, bCol5, bCol6 );
return '0'; return '0';
} }
+1 -1
View File
@@ -565,7 +565,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
SOUND->PlayOnceStreamed( THEME->GetPathTo("Sounds","evaluation extra stage") ); SOUND->PlayOnceStreamed( THEME->GetPathTo("Sounds","evaluation extra stage") );
} }
else if( bOneHasNewRecord ) else if( bOneHasNewRecord && ANNOUNCER->HasSoundsFor("evaluation new record") )
{ {
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo("evaluation new record") ); SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo("evaluation new record") );
} }
+1 -1
View File
@@ -116,7 +116,7 @@ ScreenTitleMenu::ScreenTitleMenu()
m_textVersion.LoadFromFont( THEME->GetPathTo("Fonts","normal") ); m_textVersion.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textVersion.SetText( "v3.0 beta 6 rc3" ); m_textVersion.SetText( "v3.0 final" );
m_textVersion.SetDiffuse( D3DXCOLOR(0.6f,0.6f,0.6f,1) ); // light gray m_textVersion.SetDiffuse( D3DXCOLOR(0.6f,0.6f,0.6f,1) ); // light gray
m_textVersion.SetXY( VERSION_X, VERSION_Y ); m_textVersion.SetXY( VERSION_X, VERSION_Y );
m_textVersion.SetZoom( 0.5f ); m_textVersion.SetZoom( 0.5f );
+41 -14
View File
@@ -33,7 +33,7 @@
#include "NotesLoaderKSF.h" #include "NotesLoaderKSF.h"
#include "NotesWriterDWI.h" #include "NotesWriterDWI.h"
const int FILE_CACHE_VERSION = 100; // increment this when Song or Notes changes to invalidate cache const int FILE_CACHE_VERSION = 102; // increment this when Song or Notes changes to invalidate cache
int CompareBPMSegments(const void *arg1, const void *arg2) int CompareBPMSegments(const void *arg1, const void *arg2)
@@ -777,26 +777,52 @@ void Song::SaveToDWIFile()
void Song::AddAutoGenNotes() void Song::AddAutoGenNotes()
{ {
// This is way too slow. Only autogen dance->pump and pump->dance
CArray<NotesType,NotesType> aMissingNotesTypes;
if( !SongHasNotesType(NOTES_TYPE_DANCE_SINGLE) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_SINGLE );
if( !SongHasNotesType(NOTES_TYPE_DANCE_DOUBLE) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_DOUBLE );
if( !SongHasNotesType(NOTES_TYPE_DANCE_SOLO) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_SOLO );
if( !SongHasNotesType(NOTES_TYPE_PUMP_SINGLE) ) aMissingNotesTypes.Add( NOTES_TYPE_PUMP_SINGLE );
if( !SongHasNotesType(NOTES_TYPE_PUMP_DOUBLE) ) aMissingNotesTypes.Add( NOTES_TYPE_PUMP_DOUBLE );
// for( NotesType ntMissing=(NotesType)0; ntMissing<NUM_NOTES_TYPES; ntMissing=(NotesType)(ntMissing+1) ) // This hack is no longer needed. I've sped up autogen.
// // This is way too slow. Only autogen dance->pump and pump->dance
// CArray<NotesType,NotesType> aMissingNotesTypes;
// if( !SongHasNotesType(NOTES_TYPE_DANCE_SINGLE) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_SINGLE );
// if( !SongHasNotesType(NOTES_TYPE_DANCE_DOUBLE) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_DOUBLE );
// if( !SongHasNotesType(NOTES_TYPE_DANCE_SOLO) ) aMissingNotesTypes.Add( NOTES_TYPE_DANCE_SOLO );
// if( !SongHasNotesType(NOTES_TYPE_PUMP_SINGLE) ) aMissingNotesTypes.Add( NOTES_TYPE_PUMP_SINGLE );
// if( !SongHasNotesType(NOTES_TYPE_PUMP_DOUBLE) ) aMissingNotesTypes.Add( NOTES_TYPE_PUMP_DOUBLE );
//
// for( int i=0; i<aMissingNotesTypes.GetSize(); i++ )
// { // {
// if( SongHasNotesType(ntMissing) ) // NotesType ntMissing = aMissingNotesTypes[i];
// continue;
for( int i=0; i<aMissingNotesTypes.GetSize(); i++ ) for( NotesType ntMissing=(NotesType)0; ntMissing<NUM_NOTES_TYPES; ntMissing=(NotesType)(ntMissing+1) )
{ {
NotesType ntMissing = aMissingNotesTypes[i]; next_notes_type:
if( SongHasNotesType(ntMissing) )
continue;
// missing Notes of this type // missing Notes of this type
int iNumTracksOfMissing = GAMEMAN->NotesTypeToNumTracks(ntMissing); int iNumTracksOfMissing = GAMEMAN->NotesTypeToNumTracks(ntMissing);
int j;
// look for an exact match that was created by autogen
for( j=0; j<m_apNotes.GetSize(); j++ )
{
Notes* pOriginalNotes = m_apNotes[j];
if( iNumTracksOfMissing != GAMEMAN->NotesTypeToNumTracks(pOriginalNotes->m_NotesType) )
continue; // no match, skip
Notes* pNewNotes = new Notes;
pNewNotes->m_Difficulty = pOriginalNotes->m_Difficulty;
pNewNotes->m_iMeter = pOriginalNotes->m_iMeter;
pNewNotes->m_sDescription = pOriginalNotes->m_sDescription + " (autogen)";
pNewNotes->m_NotesType = ntMissing;
pNewNotes->m_sSMNoteData = pOriginalNotes->m_sSMNoteData;
this->m_apNotes.Add( pNewNotes );
goto next_notes_type;
}
// look for closest match // look for closest match
NotesType ntBestMatch = (NotesType)-1; NotesType ntBestMatch = (NotesType)-1;
int iBestTrackDifference = 10000; // inf int iBestTrackDifference = 10000; // inf
@@ -817,7 +843,7 @@ void Song::AddAutoGenNotes()
if( ntBestMatch == -1 ) if( ntBestMatch == -1 )
continue; continue;
for( int j=0; j<m_apNotes.GetSize(); j++ ) for( j=0; j<m_apNotes.GetSize(); j++ )
{ {
Notes* pOriginalNotes = m_apNotes[j]; Notes* pOriginalNotes = m_apNotes[j];
if( pOriginalNotes->m_NotesType != ntBestMatch ) if( pOriginalNotes->m_NotesType != ntBestMatch )
@@ -835,6 +861,7 @@ void Song::AddAutoGenNotes()
newNoteData.LoadTransformedSlidingWindow( &originalNoteData, iNumTracksOfMissing ); newNoteData.LoadTransformedSlidingWindow( &originalNoteData, iNumTracksOfMissing );
pNewNotes->SetNoteData( &newNoteData ); pNewNotes->SetNoteData( &newNoteData );
this->m_apNotes.Add( pNewNotes ); this->m_apNotes.Add( pNewNotes );
goto next_notes_type;
} }
} }
} }
-1
View File
@@ -879,7 +879,6 @@ void Update()
SCREENMAN->Input( DeviceI, type, GameI, MenuI, StyleI ); SCREENMAN->Input( DeviceI, type, GameI, MenuI, StyleI );
} }
} }
+2 -10
View File
@@ -59,7 +59,7 @@ IntDir=.\../Release6
TargetDir=\stepmania\stepmania TargetDir=\stepmania\stepmania
TargetName=StepMania TargetName=StepMania
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool # End Special Build Tool
@@ -94,7 +94,7 @@ IntDir=.\../Debug6
TargetDir=\stepmania\stepmania TargetDir=\stepmania\stepmania
TargetName=StepMania-debug TargetName=StepMania-debug
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool # End Special Build Tool
@@ -374,10 +374,6 @@ SOURCE=.\NoteTypes.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\PadInput.h
# End Source File
# Begin Source File
SOURCE=.\Player.cpp SOURCE=.\Player.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -386,10 +382,6 @@ SOURCE=.\Player.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\PlayerInput.h
# End Source File
# Begin Source File
SOURCE=.\PlayerOptions.cpp SOURCE=.\PlayerOptions.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
+2 -2
View File
@@ -7,8 +7,8 @@
; NOTE: this .NSI script is designed for NSIS v1.8+ ; NOTE: this .NSI script is designed for NSIS v1.8+
Name "StepMania" Name "StepMania"
OutFile "stepmania300beta6rc3.exe" OutFile "stepmania300final.exe"
!define PRODUCT_NAME "StepMania 3.0 beta 6 rc3" !define PRODUCT_NAME "StepMania 3.0 final"
; Some default compiler settings (uncomment and change at will): ; Some default compiler settings (uncomment and change at will):