From 57896611b97826605ab0684361e6a9c9fc86068b Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 24 Oct 2002 01:51:01 +0000 Subject: [PATCH] Documentation clean up and optimized AutoGen --- stepmania/README-FIRST.TXT | 461 +++++++++++++++----------- stepmania/src/AnnouncerManager.cpp | 10 +- stepmania/src/AnnouncerManager.h | 1 + stepmania/src/Background.cpp | 26 +- stepmania/src/GameConstantsAndTypes.h | 2 +- stepmania/src/GameManager.cpp | 6 +- stepmania/src/NotesWriterDWI.cpp | 2 +- stepmania/src/ScreenEvaluation.cpp | 2 +- stepmania/src/ScreenTitleMenu.cpp | 2 +- stepmania/src/Song.cpp | 55 ++- stepmania/src/StepMania.cpp | 1 - stepmania/src/StepMania.dsp | 12 +- stepmania/stepmania.nsi | 4 +- 13 files changed, 358 insertions(+), 226 deletions(-) diff --git a/stepmania/README-FIRST.TXT b/stepmania/README-FIRST.TXT index 1a11befeeb..fc2b7a570e 100644 --- a/stepmania/README-FIRST.TXT +++ b/stepmania/README-FIRST.TXT @@ -36,7 +36,7 @@ Table of Contents 12. The StepMania Editor 13. The .SM File Format 14. Backgrounds -15. BGAnimations format +15. BGAnimations Format 16. The .CRS File Format 17. Extra Stages 18. Creating an Announcer @@ -92,10 +92,10 @@ and abort the 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 -installation.The installer automatically remove an older version of the -program if one is present. The default installation directory is +installation. The installer may prompt you to remove an older version of +the program if one is present. The default installation directory is 'C:\Program Files\StepMania'. @@ -133,6 +133,15 @@ In gameplay: * F12 = increase BPM of current segment * 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 @@ -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 search fails, StepMania will guess which image is most appropriate. -If a song file does not specify a valid movie background file, StepMania will -look for a movie in the song folder that contains the letters "movie". If -that search fails, StepMania will use the first movie in the song folder. +If there is exactly one movie in the song folder, StepMania will insert a +background change to that movie at the moment the music starts. ************************************************************ @@ -220,6 +228,9 @@ PSXPAD 0.8.2002.0606b, found at http://www.psxpad.com/download/downcnt.php?name=psxp_a020606b +StepMania now natively supports USB Pump It Up pads. + + ************************************************************ 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 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. @@ -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' and can be installed by double-clicking the .smzip file. -A StepMania package is 'installed' by extracting all files in the package to the -StepMania program directory. This allows songs, courses, themes, and +A StepMania package is 'installed' by extracting all files in the package to +the StepMania program directory. This allows songs, courses, themes, and visualizations to all be installed by the Package Manager. 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 file in any compression application (e.g. WinZip, WinRAR). -The StepMania Package Manager (smpackage.exe) can also export song packages -for you. Simply launch the Package Manager -(Start Menu->Programs->StepMania->Package Manager), click the items you would -like to make a package for, then click the Export button. A .smzip package -will be placed on your desktop, and you can share it with friends. +The StepMania Package Exporter (smpackage.exe) can create packages of your +song, announcers, themes, or other add-ons. Simply launch the Package Exporter +(Start Menu->Programs->StepMania->Package Exporter), click the items you would +like to make into a package, then click the one of the Export buttons. +"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 -question a StepMania message board. A link is available from the StepMania -web site - http://www.stepmania.com. +question a StepMania message board. For a list of StepMania message boards, +see the web site - http://www.stepmania.com. 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).   @@ -350,21 +363,21 @@ to the StepMania developers list (stepmania-devs@sourceforge.net) or to Chris 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 -format and the DWI format for use in Dance With Intensity. If you save -a song that was originally in the BMS or KSF format, the old files will be -appended with ".old", and a new .SM file will be written with your new song -data. +format and the DWI format for use in Dance With Intensity. If you save a song +that was originally in the BMS or KSF format, the old files will be appended +with ".old", and a new .SM file will be written with your new song data. Following are a few basic commands that you will find useful in learning to use the editor: -Esc - show/dimiss menu -Up/Down - change beat -Left/Right - change beat snap value -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) + * 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) ************************************************************ @@ -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 -game types that StepMania can play (dance, pump, beat, guitar, etc). The .SM -file syntax is identical to DWI except for some different tags and meanings. -These are a list of all supported tags. +game types that StepMania can play (dance, pump, beat, guitar, etc). The +syntax of a .SM is similar to .DWI and .KSF except that some tags are different. -All images can be in png, gif, jpg, or bmp format. All sounds can be in ogg, -mp3, or wav format. +(Note that StepMania can load images can be in png, gif, jpg, or bmp 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 on the Select Music screen. e.g. "~Dirty Mix~" or "(remix)". #ARTIST:...; - The artist of the song. @@ -388,56 +401,70 @@ mp3, or wav format. #SUBTITLETRANSLIT:...; - Transliteration of song's sub title for sorting #ARTISTTRANSLIT:...; - Transliteration of the artist of the 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". This image must reside in the song folder. #BACKGROUND:...; - The file name of the background image. e.g. "b4u-bg.png". This image must reside in the song folder. -#CDTITLE:...; - The file name of the spinning CD logo. e.g. "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. +#CDTITLE:...; - The file name of the spinning CD logo. e.g. + "b4u-cdtitle.png". This image must reside in the song folder. #MUSIC:...; - The file name of the music file. e.g. "b4u.mp3". This image must reside in the song folder. -#MUSICBYTES:...; - The size in bytes of the music file that this song was last - synchronized with. A "Song may be out of synch" warning will be displayed if - 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". +#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 on the Select Music screen. This is specified as a floating point value. e.g. "32.34". #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 - that in the last 1 second of playing the music will fade out. + starting. This is specified as a floating point value. e.g. "16.00". + 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 - only be played as part of a course. If "ROULETTE", the song can can also be - selected via roulette. The default value is "YES". + only be played as part of a course. If "ROULETTE", the song can can also + be selected via roulette. The default value is "YES". #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 - as floating point values. You must specifiy a BPM value for beat 0. Multiple - BPMs can be given by separating them with commas. e.g. "0=160,120=80". + speed of the arrows will change to "bpm". Both of these values are + specified as floating point values. You must specifiy a BPM value for beat + 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', - the motion of the arrows should stop for "sec" seconds. Both of these values - are specified as floating point values. Multiple stops can be given 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', - the background should begin playing 'bg name'. 'beat' is a fractional value - value and 'anim name' is a string. Different animation change are separated - by commas. e.g. "60=falling,80=flower". + the motion of the arrows should stop for "sec" seconds. Both of these + values are specified as floating point values. Multiple stops can be given + 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', the background should begin playing a new background named 'bg name'. + 'beat' is a fractional value value and 'anim name' is a string. Different + 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: Must be one of the currently supported types in StepMania: "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 -text, but is most commonly "Basic", "Another", "Trick", "Standard", "SSR", -"Maniac", "Heavy", or "Challenge". +text, but is most commonly: +"Basic", "Another", "Trick", "Standard", "SSR", "Maniac", "Heavy", "Challenge", +"SManaic" DifficultyClass: This value must be "easy", "medium", or "hard". These values correspond the levels of difficulty on the Select Difficulty screen. @@ -475,6 +502,12 @@ dance-couple = 8 notes/row dance-solo = 6 notes/row pump-single = 5 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 measure will determine the time value of each note. For example, if there are @@ -505,26 +538,27 @@ Example: 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 -animations. Each of these animation must reside in the "BGAnimations" -folder in the StepMania program directory. See the section called -"BGAnimations" in the readme for more information on the BGAnimations format. -BGAnimations will perform better than the other background modes on slower -computers. +BGAnimations - Sprite animations similar to DDR 1st-5th Mix. There must be + BGAnimation folders present in the BGAnimations directory, or else no + background will be played. See the section called "BGAnimations Format" + in this document for more information on the BGAnimations format. + BGAnimations will perform better than the other background modes on slower + computers. 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" folder in the StepMania program directory. This movie file -will be played and blended over top of the song's background graphic. + "Visualizations" folder in the StepMania program directory. This movie + 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 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 -decrease on slower computers. +background is very processor intensive, and may cause choppiness on slower +computers. Sample animations, visualizations, and random movies can be found at www.stepmania.com. @@ -543,7 +577,8 @@ BGAnimation folders. 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 -specified by having multiple . +specified by having multiple . Layer files can be PNG, AVI, or +MPEG 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\3 TileScrollLeft CycleColor 2x2.png -The first number in the name of a will specifies its drawing -order. A layers with a small number will be drawn before a layer with a larger -number. +The layers of a BGAnimation are drawn from bottom in the order in which the +layer graphics files appear alphanumerically. A layer file name will often +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 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: 0.5x, 0.75x, 1.5x, 2.0x, 3.0x, 4.0x, 5.0x, 8.0x boost, wave, drunk, dizzy, space, mini - hidden, sudden, stealth - mirror, left, right, shuffle + hidden, sudden, stealth, blink + mirror, left, right, shuffle, supershuffle little reverse 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 -files called "extra1.crs" and "extra2.crs". These courses must contain -exactly one song in the course. Don't forget to specify modifiers - see the -CRS File Format section for more information. If a CRS file is not found or -is invalid, the program will choose an appropriate song, notes, and modifiers. +files called "extra1.crs" and "extra2.crs" and placing them in the song group +folder (e.g. Songs\MAX2\extra1.crs). When it comes time to play an extra stage +the first song in the .crs file will be used. Don't forget to specify +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 (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 StepMania program directory (e.g. "Announcers\DDRMAX\"). An announcer folder -contains several more folders - one for each announcer "trigger". You can -place as many .WAV, .MP3, or .OGG sounds as you want in a trigger folder. -When StepMania wants to play a sound for that trigger, it will play a -random sound file from your trigger folder. +contains several more folders - one for each announcer "trigger". Add as many +.WAV, .MP3, or .OGG sounds as you want to the trigger folder. When StepMania +wants to play a sound for that trigger, it will play a random sound file from +your trigger folder. 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. @@ -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 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 ************************************************************ 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\\". Note skins are specific to a particular game (dance, pump, etc). In the note skin folder, you must implement the folling files for each note: - Receptor (NxN). - Note color part (NxN). - Note gray part (NxN). - Hold Explosion (NxN). - Tap Explosion Bright (NxN). - Tap Explosion Dim (NxN). - Hold.colors - Tap.colors + receptor (2x1).png + tap parts (2xN).png + tap explosion bright (NxN).png + tap explosion dim (NxN).png + note color part (NxN).png + note gray part (NxN).png + hold parts (4x2).png + hold explosion (NxN).png + tap.colors "" 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 for each game. -"NxN" is an optional string that specifies the dimensions of the graphic. -For example, if there are 6 frames, 3 wide 2 high, in your color part -animation, then you might use the file name "Up Note color part 3x2.png". +Most of the note skin elements can use any number of frames. For example, the +element "tap exposion bright" could have 4 frames (2x2), 2 frames (1x2), or +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 ************************************************************ -Themes must reside in the Themes folder in the StepMania program directory. -Inside each theme folder, there are up to three directories: "graphics", -"sounds", and "fonts". +All themes must reside in the Themes folder below the StepMania program +directory. Inside a theme folder, you will all or only a few of the items +below: -Graphics may be .sprites or any file format described in the section "How -StepMania Loads Textures". Sounds can be in .mp3, .ogg, or .wav. Fonts -must use the .font file format. + Themes\\BGAnimations\ + Themes\\Fonts\ + Themes\\Graphics\ + Themes\\Numbers\ + Themes\\Sounds\ + Themes\\metrics.ini\ -When StepMania looks to load a font element (graphic, sound, font), it -first looks in the current theme folder for the element. If that element -cannot be found, it will fall back to using the element in the theme named -"default". "default" is sort of a base theme and should not be modified. +The 5 possible folders in a theme hold "theme elements". A theme element is +simply a little piece of the theme that can be changed. Each of the 5 folders +contains different types of information as explained below: -This system allows user-made themes to override as little or as many theme -elements as they want. For example, you could create a theme that does -nothing more than override the title menu logo. Such a theme would contain -only one folder ("Graphics") and one file ("Graphics\title menu logo.png"). +BGAnimations: This folder contains BGAnimation elements for the different + screens. Since all backgrounds for all the menus in the game are generated + using BGAnimations, any screen in the game can have an animating + 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 " 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 + " 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 ************************************************************ -> What are textures? +* What are textures? "Texture" is simply another name for graphics file. The name "texture" is more common when taking about 3D graphics. This document uses "texture" and "graphic" interchangably. -> What types of graphics can StepMania read: -StepMania can use any of the following graphics formats as textures: -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? +* How to you specify that a texture has multiple frames (for animation)? Simply add the string "(NxN)". Immediately before the "." that separates 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, 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 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: [Sprite] -Texture=dancer p1 8x4.png +Texture=dancer p1 1x3.png Frame0000=0 Delay0000=0.05 Frame0001=1 Delay0001=0.05 Frame0002=2 +Delay0002=0.05 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 @@ -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. -> 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 -are storred on the graphics card. +StepMania will soon dither all textures by defaul, thus making the current +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 -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. +* Why do the graphics look so blurry? -Hints can be placed anywhere in the file name, but are usually placed at the -end of a file name in parenthesis. For example: +Some 3D graphics cards (the Voodoo3 in particular) do not support textures +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 -Arrows Left 1x4 (1 alpha).png + - 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). -> 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 @@ -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!  + ************************************************************ 22. Thanks ************************************************************ @@ -956,6 +1046,7 @@ Thanks to: Dj Slash & Tony Thai for the caution graphic Kyle "KeeL" Ward for his awesome menu music (www.ampcast.com/keel) + ************************************************************ End of document ************************************************************ diff --git a/stepmania/src/AnnouncerManager.cpp b/stepmania/src/AnnouncerManager.cpp index 2cf08b4d81..f9eeef2766 100644 --- a/stepmania/src/AnnouncerManager.cpp +++ b/stepmania/src/AnnouncerManager.cpp @@ -75,13 +75,13 @@ CString AnnouncerManager::GetPathTo( CString sFolderName ) if( m_sCurAnnouncerName!="" && !DoesFileExist(sPathToFolderCurrent) ) { LOG->Trace( "The current announcer is missing the folder '%s'.", sFolderName ); - MessageBeep( MB_OK ); +// MessageBeep( MB_OK ); CreateDirectories( sPathToFolderCurrent ); } if( !DoesFileExist(sPathToFolderEmpty) ) { LOG->Trace( "The empty announcer is missing the folder '%s'.", sFolderName ); - MessageBeep( MB_OK ); +// MessageBeep( MB_OK ); CreateDirectories( sPathToFolderEmpty ); CreateDirectories( sPathToFolderEmpty ); } @@ -90,3 +90,9 @@ CString AnnouncerManager::GetPathTo( CString sFolderName ) return sPathToFolderCurrent; } +bool AnnouncerManager::HasSoundsFor( CString sFolderName ) +{ + CStringArray asFileNames; + GetDirListing( GetPathTo(sFolderName), asFileNames ); + return asFileNames.GetSize() > 0; +} diff --git a/stepmania/src/AnnouncerManager.h b/stepmania/src/AnnouncerManager.h index 7c4a8908fb..741e4b393b 100644 --- a/stepmania/src/AnnouncerManager.h +++ b/stepmania/src/AnnouncerManager.h @@ -25,6 +25,7 @@ public: CString GetCurAnnouncerName() { return m_sCurAnnouncerName; }; CString GetPathTo( CString sFolderName ); + bool HasSoundsFor( CString sFolderName ); protected: static CString GetAnnouncerDirFromName( CString sAnnouncerName ); diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index da28f70ee0..6dd7c8952f 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -151,10 +151,10 @@ void Background::LoadFromSong( Song* pSong ) // movies in RandomMovies dir, BGAnims in BGAnimsDir. CStringArray asFiles; - // Look for movies in the song dir - GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".avi", asFiles, false, true ); - GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".mpg", asFiles, false, true ); - GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName+".mpeg", asFiles, false, true ); + // Look for BG movies in the song dir + GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true ); + GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true ); + GetDirListing( pSong->m_sSongDir+aniseg.m_sBGName, asFiles, false, true ); if( asFiles.GetSize() > 0 ) { pTempBGA = new BGAnimation; @@ -178,9 +178,9 @@ void Background::LoadFromSong( Song* pSong ) } // Look for movies in the RandomMovies dir - GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".avi", asFiles, false, true ); - GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".mpg", asFiles, false, true ); - GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName+".mpeg", asFiles, false, true ); + GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true ); + GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true ); + GetDirListing( RANDOMMOVIES_DIR+aniseg.m_sBGName, asFiles, false, true ); if( asFiles.GetSize() > 0 ) { pTempBGA = new BGAnimation; @@ -203,6 +203,18 @@ void Background::LoadFromSong( Song* pSong ) 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 } diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index d37835e7fd..0c409f1c30 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -69,7 +69,7 @@ enum NotesType NOTES_TYPE_EZ2_SINGLE, NOTES_TYPE_EZ2_DOUBLE, NOTES_TYPE_EZ2_REAL, - NOTES_TYPE_PARA, + NOTES_TYPE_PARA_SINGLE, NUM_NOTES_TYPES, // leave this at the end NOTES_TYPE_INVALID, }; diff --git a/stepmania/src/GameManager.cpp b/stepmania/src/GameManager.cpp index f11e74e73d..b94812b9d9 100644 --- a/stepmania/src/GameManager.cpp +++ b/stepmania/src/GameManager.cpp @@ -915,7 +915,7 @@ StyleDef g_StyleDefs[NUM_STYLES] = true, // m_bUsedForGameplay true, // m_bUsedForEdit "single", // m_szName - NOTES_TYPE_PARA, // m_NotesType + NOTES_TYPE_PARA_SINGLE, // m_NotesType StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType { 320, 320 }, // m_iCenterX 5, // m_iColsPerPlayer @@ -1373,6 +1373,10 @@ NotesType GameManager::StringToNotesType( CString sNotesType ) if( sNotesType == "ez2-single-hard" ) sNotesType = "ez2-single"; + // HACK! "para-single" used to be called just "para" + if( sNotesType == "para" ) + sNotesType = "para-single"; + for( int i=0; iWarn( "Failed to find the DWI character for the row %d %d %d %d %d %d", bCol1, bCol2, bCol3, bCol4, bCol5, bCol6 ); return '0'; } diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 4749463c37..7b82609d03 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -565,7 +565,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) 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") ); } diff --git a/stepmania/src/ScreenTitleMenu.cpp b/stepmania/src/ScreenTitleMenu.cpp index 3d5fa84231..ab790aa2d3 100644 --- a/stepmania/src/ScreenTitleMenu.cpp +++ b/stepmania/src/ScreenTitleMenu.cpp @@ -116,7 +116,7 @@ ScreenTitleMenu::ScreenTitleMenu() 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.SetXY( VERSION_X, VERSION_Y ); m_textVersion.SetZoom( 0.5f ); diff --git a/stepmania/src/Song.cpp b/stepmania/src/Song.cpp index a418fe555d..63839d0ba4 100644 --- a/stepmania/src/Song.cpp +++ b/stepmania/src/Song.cpp @@ -33,7 +33,7 @@ #include "NotesLoaderKSF.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) @@ -777,26 +777,52 @@ void Song::SaveToDWIFile() void Song::AddAutoGenNotes() { - // This is way too slow. Only autogen dance->pump and pump->dance - CArray 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; ntMissingpump and pump->dance +// CArray 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; iNotesTypeToNumTracks(ntMissing); + int j; + + // look for an exact match that was created by autogen + for( j=0; jNotesTypeToNumTracks(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 NotesType ntBestMatch = (NotesType)-1; int iBestTrackDifference = 10000; // inf @@ -817,7 +843,7 @@ void Song::AddAutoGenNotes() if( ntBestMatch == -1 ) continue; - for( int j=0; jm_NotesType != ntBestMatch ) @@ -835,6 +861,7 @@ void Song::AddAutoGenNotes() newNoteData.LoadTransformedSlidingWindow( &originalNoteData, iNumTracksOfMissing ); pNewNotes->SetNoteData( &newNoteData ); this->m_apNotes.Add( pNewNotes ); + goto next_notes_type; } } } diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 22e367d693..baf574ea3e 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -879,7 +879,6 @@ void Update() SCREENMAN->Input( DeviceI, type, GameI, MenuI, StyleI ); } - } diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 2a62a3c673..a04daa9e71 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -59,7 +59,7 @@ IntDir=.\../Release6 TargetDir=\stepmania\stepmania TargetName=StepMania 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 # End Special Build Tool @@ -94,7 +94,7 @@ IntDir=.\../Debug6 TargetDir=\stepmania\stepmania TargetName=StepMania-debug 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 # End Special Build Tool @@ -374,10 +374,6 @@ SOURCE=.\NoteTypes.h # End Source File # Begin Source File -SOURCE=.\PadInput.h -# End Source File -# Begin Source File - SOURCE=.\Player.cpp # End Source File # Begin Source File @@ -386,10 +382,6 @@ SOURCE=.\Player.h # End Source File # Begin Source File -SOURCE=.\PlayerInput.h -# End Source File -# Begin Source File - SOURCE=.\PlayerOptions.cpp # End Source File # Begin Source File diff --git a/stepmania/stepmania.nsi b/stepmania/stepmania.nsi index 28a8520be5..57e7d05955 100644 --- a/stepmania/stepmania.nsi +++ b/stepmania/stepmania.nsi @@ -7,8 +7,8 @@ ; NOTE: this .NSI script is designed for NSIS v1.8+ Name "StepMania" -OutFile "stepmania300beta6rc3.exe" -!define PRODUCT_NAME "StepMania 3.0 beta 6 rc3" +OutFile "stepmania300final.exe" +!define PRODUCT_NAME "StepMania 3.0 final" ; Some default compiler settings (uncomment and change at will):