diff --git a/stepmania/NEWS b/stepmania/NEWS index bee158d8a5..083d721fc6 100644 --- a/stepmania/NEWS +++ b/stepmania/NEWS @@ -15,6 +15,8 @@ NEW FEATURE: F6 to save screenshot. Saved in StepMania program directory as "screenshotXXXX.bmp". CHANGE: Reorganization of options screens. NEW FEATURE: Option for user-selectable extra stage 1 +CHANGE: Documentation now in HTML format. +CHANGE: Overhauled NoteSkin format. See README-FIRST.htm for details. ----------------------- Version 3.01 --------------------------- CHANGE: Simplified NoteSkin tap graphic format. Old NoteSkins will need to diff --git a/stepmania/NoteSkins/dance/default/Down Tap Explosion Bright.png b/stepmania/NoteSkins/dance/default/Down Tap Explosion Bright.png new file mode 100644 index 0000000000..deaeec238d Binary files /dev/null and b/stepmania/NoteSkins/dance/default/Down Tap Explosion Bright.png differ diff --git a/stepmania/NoteSkins/dance/default/Down Tap Explosion Dim.png b/stepmania/NoteSkins/dance/default/Down Tap Explosion Dim.png new file mode 100644 index 0000000000..1824828db6 Binary files /dev/null and b/stepmania/NoteSkins/dance/default/Down Tap Explosion Dim.png differ diff --git a/stepmania/NoteSkins/dance/default/metrics.ini b/stepmania/NoteSkins/dance/default/metrics.ini new file mode 100644 index 0000000000..9972768a56 --- /dev/null +++ b/stepmania/NoteSkins/dance/default/metrics.ini @@ -0,0 +1,19 @@ +[NoteDisplay] +DrawHoldHeadForTapsOnSameRow=1 +TapNoteAnimationLengthInBeats=4 +HoldHeadAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. +HoldBodyAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. +HoldTailAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. +TapNoteAnimationIsVivid=1 +HoldHeadAnimationIsVivid=0 +HoldBodyAnimationIsVivid=0 +HoldTailAnimationIsVivid=0 +TapNoteAnimationIsNoteColor=0 +HoldHeadAnimationIsNoteColor=0 +HoldBodyAnimationIsNoteColor=0 +HoldTailAnimationIsNoteColor=0 +StartDrawingHoldBodyOffsetFromHead=0 +StopDrawingHoldBodyOffsetFromTail=-32 // top of tail +HoldHeadIsWavy=0 +HoldTailIsWavy=1 +HoldNGGrayPercent=0.8 diff --git a/stepmania/README-FIRST.TXT b/stepmania/README-FIRST.TXT deleted file mode 100644 index 3247f846f2..0000000000 --- a/stepmania/README-FIRST.TXT +++ /dev/null @@ -1,1103 +0,0 @@ - ____ __ -/\ _`\ /\ \__ /'\_/`\ __ -\ \,\L\_\ \ ,_\ __ _____ /\ \ __ ___ /\_\ __ - \/_\__ \\ \ \/ /'__`\/\ '__`\ \ \__\ \ /'__`\ /' _ `\/\ \ /'__`\ - /\ \L\ \ \ \_/\ __/\ \ \L\ \ \ \_/\ \/\ \L\.\_/\ \/\ \ \ \/\ \L\.\_ - \ `\____\ \__\ \____\\ \ ,__/\ \_\\ \_\ \__/.\_\ \_\ \_\ \_\ \__/.\_\ - \/_____/\/__/\/____/ \ \ \/ \/_/ \/_/\/__/\/_/\/_/\/_/\/_/\/__/\/_/ - \ \_\ - \/_/ - __ __ -  /'__`\ /'__`\ - /\_\L\ \ /\ \/\ \ - \/_/_\_<_ \ \ \ \ \ - /\ \L\ \__\ \ \_\ \ - \ \____/\_\\ \____/ - \/___/\/_/ \/___/ - -(c)2001-2003, StepMania team -http://www.stepmania.com - -************************************************************ -Table of Contents -************************************************************ - -1. About StepMania -2. Minimum Requirements -3. DirectX -4. Installation -5. Controls -6. How StepMania Loads Songs -7. Connecting Dance Pads -8. Compatibility Issues -9. FAQ / Troubleshooting -10. StepMania Packages - .smzip -11. Questions, Bugs, Suggestions, and Help -12. The StepMania Editor -13. The .SM File Format -14. Backgrounds -15. BGAnimations Format -16. The .CRS File Format -17. Extra Stages -18. Creating an Announcer -19. Creating a Note Skin -20. Creating a Theme -21. How StepMania Loads Textures -22. Building StepMania from CVS Source -23. Thanks - -See the file "NEWS" for version history. - - -************************************************************ -1. About StepMania -************************************************************ - -StepMania is capable of playing many game types. Currently, it supports games -similar to Dance Dance Revolution, Pump It Up, EZ 2 Dancer, and Para Para -Paradise. In the future, it will support games similar to BeatMania, Guitar -Freaks, DrumMania, and more. - -The games played by StepMania are rhythm games. Notes scroll up from the -bottom of the screen, and the player must hit the corresponding button on the -controller in time to the music. All games can be played using the keyboard, -but the real fun comes when using specially designed controllers, like a dance -pad or hand sensors. - - -************************************************************ -2. Minimum Requirements -************************************************************ - -* Windows 98, Windows ME, Windows 2000, or Windows XP -* Pentium II, Pentium III, Celeron, Athlon, or compatible processor, 266MHz - minimum (400 MHz recommended) -* 64 MB of RAM -* Video card that supports High Color (16-bit color) and has 16MB video RAM -* DirectX 8.1 compatible video card with drivers -* DirectX 8.1 compatible sound card with drivers -* DivX 5 video codec for movie visualizations (www.divx.com) - - -************************************************************ -3. DirectX -************************************************************ - -DirectX 8.1 is required before installing StepMania. If DirectX 8.1 is not -installed on your computer, the StepMania installer will display a warning -and abort the installation. - - -************************************************************ -4. Installation -************************************************************ - -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 may prompt you to remove an older version of -the program if one is present. The default installation directory is -'C:\Program Files\StepMania'. - - -************************************************************ -5. Controls -************************************************************ - -Use the "Config Key/Joy" option from the Title Menu to configure your keyboard, -dance pad, or other game controller. This menu allows you to map up to 2 -keyboard/joystick buttons to each function in the game. The third column is -the default key mapping, and cannot be changed. However, you can override a -default keyboard key by simply assigning it to another function. The mappings -for player 1 are on the left half of the screen, and the mapping for player 2 -are on right half. - - -The following is a list of special keys: - -Any time: - * F1 = insert coin for player 1 - * F2 = insert coin for player 2 - * F4 = toggle fullscreen - * F5 = toggle detail - * Hold Tab = increase game speed 4x (useful for moving through menus quickly) - * Hold Tilde (~) = decrease game speed to 1/4x - -In menus: - * Arrow keys navigate menus - * Enter = Start - * Escape = Back - -In any attract screen: - * Left or Right = next attract screen - * F3 = toggle CoinMode - -In title menu: - * Escape = return to attract sequence - -In gameplay: - * F8 = toggle AutoPlay - * F9 = decrease offset - * F10 = increase offset - * F11 = decrease BPM of current segment - * 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 -************************************************************ - -All files for a specific song (data file, music file, banner, background) -must reside in a single folder. This folder must have the following path: - - Songs/// - -For example, the song B4U may consist of the following files: - - Songs/Dance Dance Revolution 4th Mix/B4U/b4u.dwi - Songs/Dance Dance Revolution 4th Mix/B4U/b4u.mp3 - Songs/Dance Dance Revolution 4th Mix/B4U/b4u-banner.png - Songs/Dance Dance Revolution 4th Mix/B4U/b4u.png - Songs/Dance Dance Revolution 4th Mix/B4U/b4u-movie.avi - -StepMania supports the SM, DWI, BMS, and KSF song file formats. If the song -file format is BMS or KSF, simply put all the KSF or BMS files into the song -folder. - -If a song file does not specify a valid banner file, StepMania first looks -for a graphic in the song folder that contains the word "banner". If that -search fails, StepMania will guess which image is most appropriate. - -If a song file does not specify a valid background file, StepMania first looks -for a graphic in the song folder that contains the words "bg" or "background". -If that search fails, StepMania will guess which image is most appropriate. - -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 there is exactly one movie in the song folder, StepMania will insert a -background change to that movie at the moment the music starts. - - -************************************************************ -7. Connecting Dance Pads -************************************************************ - -There are several devices that allow you to connect PlayStation dance pads to -your PC. - -* Not recommended: generic PlayStation->USB converter - -Using a generic PlayStation->USB converter is not recommended to play any -dancing game on the PC. The vast majority of these converters are not capable -of registering simultaneous presses of Left+Right or Up+Down. This -restriction will cause the player to miss many notes where two buttons must -be hit simultaneously. - -* Highly Recommended: specific brands of PlayStation->USB adaptor - -There is just one brand of PlayStation->USB adaptor that functions perfectly -with StepMania. These adaptors are available for purchase through some -importers (www.liksang.com). The adaptor is made by "Boom", and it small and -black with a detachable USB cable. These adaptors cost about $15 and allow -you to attach one dance pad per adaptor. The primary advantage of these -adaptors is that they do not require special drivers and require no -configuring. - -* Semi-Recommended: PlayStation->Parallel adaptor - -PlayStation->Parallel converters do not have the simultaneous button problem -that USB converters do. The disadvantage of these adaptors is that home-made -drivers are required to use these devices. These drivers are often finicky -and incompatible with some sound cards. PlayStation->Parallel adaptors can -be purchased from the StepMania web site or any importer. - -For Windows 98 and Windows Me users, the recommended driver is "DirectPad Pro -5.0 for Win9x". For Windows 2000 and Windows XP, the recommended drivers is -NTPad XP 1.x or PSXPAD. - -Win98/WinME - "DirectPad Pro 5.0 for Win9x", found at - http://www.aldostools.com/dpad.html - -Win2K/WinXP -NTPad XP 1.x, found at - http://www.aldostools.com/dpad.html -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 -************************************************************ - -Some video card/driver combinations have visual errors when running StepMania. -If you experience any visual errors, please visit your video card -manufacturer's web site and download the latest Direct3D 8.1 drivers. Below -is a list of known issues that are thought to be video card driver bugs: - -* S3 Savage family cards (e.g. Diamond Stealth) -Symptom: The right edge of some graphics appears "cut off". -Explanation: Drivers do not properly handle textures >= 512x512, resulting in -cropped textures. Turn the texture detail option to 256 to force textures to -a smaller size. - -* SiS cards -Symptom: Garbled fonts. -Explanation: Drivers have errors in handling texture coordinates. Only known -solution is to upgrade drivers. - -* Any card older than two years -Symptom: Various graphical glitches. -Explanation: These problems are most often caused by buggy video card drivers -bugs. Please upgrade to the latest drivers, which will hopefully fix the -errors. - - -************************************************************ -9. FAQ / Troubleshooting -************************************************************ - -* The error "Cannot find Dinput8.dll" appears when launching the game. - -You need to download DirectX 8.1. http://www.microsoft.com/directx - -* StepMania reports "Direct3DCreate failed". - -You need to download DirectX 8.1. http://www.microsoft.com/directx - -* StepMania reports "Direct3DCreateDevice failed". - -This error means that your video card or drivers do not support Direct3D 8. -Download the latest drivers for your video card. If your video card is older -than 2 or 3 years, Direct3D 8 drivers may not be available. Sorry. - -* Music rates of over 100% do not work on my computer. Why? - -Some very old sound cards do not support sound playback rates that are greater -than the original sample rate. This problem is likely to be corrected by newer -sound card drivers. - -* I’m looking to purchase a video card. What works well with StepMania? - -Just about any video card manufactured in the last year will run StepMania -flawlessly at 60 frames per second. I recommend any card with an nVidia -GeForce chip or an ATI Radeon chip. - -* How can I improve performance with my existing video card - -1. Install the latest drivers for your video card. -2. Press F5 in the game to toggle between high detail and low detail modes. -3. Tweak the Display Resolution and Texture Resolution setting in the - GameOptions screen. - -* Will you tell me when the next version will be released? - -Nope, Sorry. It's gotten me in trouble before. - -* Why won't you tell me? I promise I won't tell anyone else. - -The reasons I won't tell is because: a) I don't know yet, and b) I don't want -to make anyone angry if it takes longer than expected (it usually does). - - -************************************************************ -10. StepMania Packages - .smzip -************************************************************ - -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 -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 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. - - -************************************************************ -11. Questions, Bugs, Suggestions, and Help -************************************************************ - -If you have a question about or problem with StepMania, please first ask your -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).   -This will allow the developers to track and fix bugs much more efficiently.   - -* In a bug report, please specify your video card brand and model, and your OS -version (Win98, WinXP, etc). -* PLEASE, PLEASE enter your e-mail address on the bug reports. In many cases, -we need more information from the bug reporter. - -Please use SourceForge's feature request system to enter new feature requests -(http://sourceforge.net/tracker/?atid=421369&group_id=37892&func=browse). Also, -please discuss feature ideas on the StepMania message board or the StepMania -developers list (stepmania-devs@sourceforge.net).   - -If you would like to help with development of StepMania, please send an email -to the StepMania developers list (stepmania-devs@sourceforge.net) or to Chris -(chris@videogamers.com). - - -************************************************************ -12. The StepMania editor -************************************************************ - -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. - -Following are a few basic commands that you will find useful in learning to use -the 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) - - -************************************************************ -13. The .SM file format -************************************************************ - -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 -syntax of a .SM is similar to .DWI and .KSF except that some tags are different. - -(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. (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. -#TITLETRANSLIT:...; - Transliteration of song's main title for sorting -#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. -#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. -#MUSIC:...; - The file name of the music file. e.g. "b4u.mp3". This image - must reside in the song folder. -#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. "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". -#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". -#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 a new background named 'bg name'. - 'beat' is a fractional value value and 'bg name' is a string. Different - bg changes 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. - You must include the file extension in "bg name". e.g. - "60=falling.avi,80=flower.mpg". - - 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. - You must include the file extension in "bg name". e.g. - "60=falling.avi,80=flower.mpg". - - 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 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-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", "Challenge", -"SManaic" - -DifficultyClass: This value must be "easy", "medium", or "hard". These values -correspond the levels of difficulty on the Select Difficulty screen. - -DifficultyMeter: The difficulty of these notes as a bar rating. The value must -be an integer between 1 and 10. - -RadarValues: The values that will be displayed on the Groove Radar as floats -between 0.00 and 1.00. The 5 values must be separated by commas, and are -specified in the order: "stream,voltage,air,freeze,chaos". For MAX300, these -values are "0.95,0.98,0.22,0.12,0.13". These values will automatically be -written when you save the song in the StepMania editor, but you may edit the -.SM file afterward to tweak them. - -NoteData: This value requires a longer explanation. - -Each note is represented by a character: - -0 = no note here -1 = a regular "tap note" -2 = beginning of a "hold note" -3 = end of a "hold note" -a-z,A-z = tap notes reserved for game types that have sounds associated with notes - -Notes that are hit at the same time are grouped into rows. For example, if the -NotesType is "dance-single", the row "1001" would specify that both the Left -and Right and Down panels should be hit at the same time. - -The number of notes per row (also called the number of 'columns') depends on -the "NotesType. - -dance-single = 4 notes/row (Left,Down,Up,Right) -dance-double = 8 notes/row -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 -4 note rows in a measure, each note will be treated as a quarter note. If there -are 8 notes rows in a measure, each note will be treated as a eighth note. If -there are 12 notes rows in a measure, each note will be treated as a triplet -(1/12th) note. Measures are separated by a comma. - -Example: - - // measure 1 -2010 -0000 -0100 -0000 -: // measure 2 -0001 -0100 -0001 -0000 -3010 -0000 -0000 -0000 -; - -************************************************************ -14. Backgrounds -************************************************************ - -StepMania supports three different modes of backgrounds. The default -background mode can be set in the Graphic Options menu. - -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. - -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. - -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 choppiness on slower -computers. - -Sample animations, visualizations, and random movies can be found at -www.stepmania.com. - - -************************************************************ -15. BGAnimations Format -************************************************************ - -The BGAnimations folder in the StepMania program directory may contain several -BGAnimation folders. - -\BGAnimations\\ - - is the name of the animation. - - 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 . Layer files can be PNG, AVI, or -MPEG files. - -For example, a BGAnimation named "flower" may include the files: - - BGAnimations\flower\1 TileScrollUp.png - BGAnimations\flower\2 StartOnRandomFrame ParticlesFloatDown 1x2.png - BGAnimations\flower\3 TileScrollLeft CycleColor 2x2.png - -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: - -UseSongBg - Use the song's background file instead of this graphics file. -Since this graphics file is merely a placeholder, you might want to make this -graphic a 1x1 graphic to save disk space. - -Add - use additive blending instead of normal blending. - -CycleColor - cycle the color of the layer over the colors of the rainbow - -CycleAlpha - cycle the alpha channel of the layer over type - -StartOnRandomFrame - Start the animation on a random frame. This is mainly -useful for Tile or Particle effects. - -DontAnimate - Stay on the first frame of this animation. This is only useful -for layers with multiple frames. - -(stretch effects) - These scretch the graphic across the extire screen. -ScretchScrollLeft, -StretchScrollRight, -StretchScrollUp, -StretchScrollDown, - - Scroll the layer in a direction - -StretchWater, -StretchBubble, -StretchTwist, -StretchSpin, - - Deform the background sprite with an effect. Only stretch spin is currently implemented. - -(particle effects) - Use the graphic to make individual particles on the screen. -ParticlesSpiralOut, -ParticlesSpiralIn, - - Spiral particles away from/toward the center of the screen. -ParticlesFloatUp, -ParticlesFloatDown, -ParticlesFloatLeft, -ParticlesFloatRight, - - Scroll the particles across the screen. -ParticlesBounce, - - Particles start traveling in random directions and bounce when they hit the edge of the screen. - -(tile effects) - Tile the graphics across the screen, forming a grid of graphics. -TileStill, -TileScrollLeft, -TileScrollRight, -TileScrollUp, -TileScrollDown, - - Scroll the tiles - -TileFlipX, -TileFlipY, - - Flip the tiles along the X or Y axis. - -TilePulse, - - Tiles zoom in and out. - - -************************************************************ -15. The .CRS File Format -************************************************************ - -CRS files define the courses used in the "Oni" Nonstop Challenge mode. All CRS -files must reside in the "Courses" folder in the StepMania program folder. - -#COURSE:...; - name of the course -#LIVES:<0..10>; - An integer between 0 and 10. This line is optional. -#REPEAT:; - start over after last stage? -#SONG:\:[:modifiers]; - - group folder - The name of the folder that contains the song folder. - song folder - the name of the folder that contains files for the song - description - BASIC, TRICK, SSR, MANIAC, HEAVY, etc. - 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, blink - mirror, left, right, shuffle, supershuffle - little - reverse - note, flat, plain - noholds - nofreeze - dark - norecover, suddendeath, power-drop, death - 0.7xmusic, 0.8xmusic, 0.9xmusic, 1.0xmusic, 1.1xmusic, - 1.2xmusic, 1.3xmusic, 1.4xmusic, 1.5xmusic - - -************************************************************ -16. Extra Stages -************************************************************ - -You can manually specify extra stages for each song group by creating .CRS -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". - - -************************************************************ -17. Creating an Announcer -************************************************************ - -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". 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. -"everybodys waiting for you.mp3"). If there are 0 sound files in a trigger -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 "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 (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. - -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. - - -************************************************************ -19. Creating a Theme -************************************************************ - -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: - - Themes\\BGAnimations\ - Themes\\Fonts\ - Themes\\Graphics\ - Themes\\Numbers\ - Themes\\Sounds\ - Themes\\metrics.ini\ - -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: - -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 of - 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). - Top=<0..63>: This indicates the top of a typical capital letter, from - the top of the frame. If not specified, this will be derived from - LineSpacing. - Baseline=<0..63>: This indicates the baseline of the font, from the - top of the frame. If not specified, the baseline is derived from - LineSpacing. - -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. - - -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. - -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". - - -************************************************************ -20. How StepMania Loads 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. - - -* 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 -called "title menu logo.png" that you would like to turn into an animation. -Now, you create an graphic file with 9 frames of animation - 3 frames wide -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? - -.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 -may specify: 1) What frame of the graphic to show, and 2) how long to show -this state before moving to the next state. - -Let's look at an example .sprite file: - -[Sprite] -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 -to specify the dimensions in the file name using the convention described -above. - -FrameNNNN is the index of the frame number to use for the first state of the -animation. Frame may range between 0 and (total number of frames - 1). -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? - -StepMania will soon dither all textures by defaul, thus making the current -texture hint system obsolte. - - -* Why do the graphics look so blurry? - -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: - - - 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). - - -************************************************************ -21. Building StepMania from CVS source -************************************************************ - -CVS is the repository that manages the StepMania source code. Our CVS server is -graciously provided by SourceForge. You can get the absolute-latest bleeding -edge updates to StepMania by taking the source from CVS. Below are instructions -on how to configure your computer to download source code from CVS and complile -the source into a working executable. If you do not have a basic understanding -of how to build a program using Visual C++, then you probably should not attempt -to build StepMania. - -* Step 1: Install and configure Visual C++ - -The StepMania source can currently be built with Microsoft Visual C++ 6.0 or -Visual C++ .Net. Installing Visual C++ or Visual Studio with all the default -options is sufficient. - -* Step 2: Install the Direct X 8.1 SDK - -The DirectX 8.1 SDK is a free (but large) download from Microsoft: -http://msdn.microsoft.com/downloads/?url=/downloads/sample.asp?url=/MSDN-FILES/ -027/001/771/msdncompositedoc.xml&frame=true. Install it using all the default -settings. The SDK installer will configure Visual C++ with the correct paths -needed to find the DirectX 8.1 libraries and headers. - -* Step 3: Create a SourceForge account - -In order to commit changes to CVS, you'll have to have a SourceForge account. -Create an account at www.sourceforge.net, then e-mail Chris -(chris@videogamers.com) with your username so he can add you to the project. - -* Step 4: Install WinCVS - -A CVS client is required to "checkout" the course from the CVS server. Download -version 1.2 of WinCVS here - http://www.cvsgui.org -(or http://sourceforge.net/project/showfiles.php?group_id=10072) - -IMPORTANT: Now, open and close WinCVS once. This will cause WinCVS to create -registry entries, which is required for the next step... - -* Step 5: Use SourceForge Setup to install SSH and configure WinCVS - -A small utility called SourceForge Setup will greatly simplify the steps needed -to configure SSH and WinCVS. Download SourceForge Setup from -http://sfsetup.sourceforge.net/. Use the following settings when prompted by SF -Setup: - -- Unpack SSH directory: c:\ssh -- SSH install direcotory: c:\ssh -- Your home directory: c:\ssh -- Your SourceForge user name: -yourusername- -- Name of the project: stepmania -- The directory where you will be keeping checked out project sources: -c:\stepmania - -IMPORTANT: If you are using Windows 2000 or Windows XP SourceForge Setup will -not correctly write changes to the c:\autoexec.bat file. Verify that the -following lines are present after you run SF Setup: - -rem SourceForge setup stuff -SET PATH=%PATH%;c:\ssh -SET HOME=c:\ssh - -IMPORTANT: You must restart after running SF Setup so that the new environment -variables take effect. - -* Step 6: Enable SSH access to the cvs machine - -Before you can use your account, you must run the following (substituting your -username and projectname as appropriate) before attempting to use CVS from a new -user account. Open a command prompt, and type: - -ssh -l username cvs.stepmania.sourceforge.net - -Enter your password, and you'll get a message about how you're not supposed to -be there and the connection will drop. What they don't tell you is that this -creates your home directory and is required for things to start working. - -* Step 7: "Checkout" the source code - -- Open up WinCVS again. -- In the right pane, you should see the folder "stepmania". -- Right click on that folder and choose "Checkout module...". For the module name - enter "stepmania". -- Click OK. -- If a "chose your home directory" window appears, select "c:\stepmania". -- A minimized console window should appear. Unminimize it, type in your - SourceForge password, and press Enter. -- The source code should begin downloading. This can take a long time depending - on your connection speed. - -* Done! Enjoy staying on the bleeding edge of StepMania releases!  - -* Optional: Create the SSH keypair for painless access to CVS server via SSH. - -Open a command prompt and enter this to create a new key pair: - -ssh-keygen -C -f identity - - is an identifier placed in the public key. I used my email address. -Just press enter when it asks you for a passphrase. You don't want a -passphrase. BTW, without the -C option the program will fail and you won't get -a new key pair. I couldn't use any other ssh-keygen utility except for this -one. Any other (SecureCRT, or the linux server) and ssh.exe wouldn't read it. - -Next, on your user account page at SourceForge, you should find a box to enter -your SSH public key. Copy the entire contents of the identity.pub file -(located in your .ssh directory) into the text entry box on the page -- be -sure not to add any line breaks or it will not work. After a 6 hour wait, you -should be able to use CVS with SSH without using your password. - -(Meanwhile) Create a new file called ssh.bat in your WinCVS directory with -notepad (or whatever editor) and dump these contents into it: - -@echo off -rem echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 > debug.txt -ssh.exe -C -l %3 -i c:\ssh\.ssh\identity %1 %4 - -Edit paths as appropriate. Use of the .bat file is mainly for the ability to -manipulate the command line that ssh gets. These options aren't in WinCVS yet. -On the Ports tab of WinCvs preferences, select 'Check for an alternate RSH -name' and put "ssh.bat" into the editbox. - -WinCVS will create a new console window in your taskbar when running ssh.bat, -but you won't ever see any output as it's redirected. - -************************************************************ -22. Thanks -************************************************************ - -Thanks to: - redcrusher for help on ez2 graphics - 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/README-FIRST.htm b/stepmania/README-FIRST.htm new file mode 100644 index 0000000000..d8303f6dfc --- /dev/null +++ b/stepmania/README-FIRST.htm @@ -0,0 +1,1087 @@ + + + + + + + +New Page 1 + + + + +

StepMania 3.0 final
+(c)2001-2003, StepMania team, All rights reserved.
+http://www.stepmania.com

+

************************************************************
+Table of Contents
+************************************************************
+
+About StepMania
+Minimum Requirements
+DirectX
+Installation
+Controls
+How StepMania Loads Songs
+Connecting Dance Pads
+Compatibility Issues
+FAQ / Troubleshooting
+StepMania Packages - .smzip
+Questions, Bugs, Suggestions, +and Help
+The StepMania Editor
+The .SM File Format
+Backgrounds
+BGAnimations Format
+The .CRS File Format
+Extra Stages
+Creating an Announcer
+Creating a Note Skin
+Creating a Theme
+How StepMania Loads Textures
+Building StepMania from CVS Source
+Thanks
+
+See the file NEWS for version history.
+
+
+************************************************************
+About StepMania
+************************************************************
+
+StepMania is capable of playing many game types. Currently, it supports games +similar to Dance Dance Revolution, Pump It Up, EZ 2 Dancer, and Para Para +Paradise. In the future, it will support games similar to BeatMania, Guitar +Freaks, DrumMania, and more.
+
+The games played by StepMania are rhythm games. Notes scroll up from the bottom +of the screen, and the player must hit the corresponding button on the +controller in time to the. All games can be played using the keyboard, but the +real fun comes when using specially designed controllers, like a dance pad or +hand sensors.
+
+
+************************************************************
+Minimum Requirements
+************************************************************
+
+* Windows 98, Windows ME, Windows 2000, or Windows XP
+* Pentium II, Pentium III, Celeron, Athlon, or compatible processor, 266MHz +minimum (400 MHz recommended)
+* 64 MB of RAM
+* Video card that supports High Color (16-bit color) and has 16MB video RAM
+* DirectX 8.1 compatible video card with drivers
+* DirectX 8.1 compatible sound card with drivers
+* DivX 5 video codec for movie visualizations (www.divx.com)
+
+
+************************************************************
+DirectX
+************************************************************
+
+DirectX 8.1 is required before installing StepMania. If DirectX 8.1 is not +installed on your computer, the StepMania installer will display a warning and +abort the installation.
+
+
+************************************************************
+Installation
+************************************************************
+
+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 may prompt you to remove an older version of the program if one is +present. The default installation directory is 'C:\Program Files\StepMania'.
+
+
+************************************************************
+Controls
+************************************************************
+
+Use the "Config Key/Joy" option from the Title Menu to configure your keyboard, +dance pad, or other game controller. This menu allows you to map up to 2 +keyboard/joystick buttons to each function in the game. The third column is the +default key mapping, and cannot be changed. However, you can override a  +default keyboard key by simply assigning it to another function. The mappings +for player 1 are on the left half of the screen, and the mapping for player 2 +are on right half.
+
+
+The following is a list of special keys:
+
+Any time:
+* F1 = insert coin for player 1
+* F2 = insert coin for player 2
+* F4 = toggle fullscreen
+* F5 = take screenshot (saves to program directory as "screenNNNN.bmp")
+* Hold Tab = increase game speed 4x (useful for moving through menus quickly)
+* Hold Tilde (~) = decrease game speed to 1/4x
+
+In menus:
+* Arrow keys navigate menus
+* Enter = Start
+* Escape = Back
+
+In any attract screen:
+* Left or Right = next attract screen
+* F3 = toggle CoinMode
+
+In title menu:
+* Escape = return to attract sequence
+
+In gameplay:
+* F6 = toggle AutoSync mode
+* F7 = toggle assist tick
+* F8 = toggle AutoPlay
+* F9 = decrease offset
+* F10 = increase offset
+* F11 = decrease BPM of current segment
+* 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)
+
+************************************************************
+How StepMania Loads Songs
+************************************************************
+
+All files for a specific song (data file, music file, banner, background) must +reside in a single folder. This folder must have the following path:
+
+      Songs/<group folder>/<song folder>/
+
+For example, the song B4U may consist of the following files:
+
+      Songs/Dance Dance Revolution 4th Mix/B4U/b4u.dwi
+      Songs/Dance Dance Revolution 4th Mix/B4U/b4u.mp3
+      Songs/Dance Dance Revolution 4th +Mix/B4U/b4u-banner.png
+      Songs/Dance Dance Revolution 4th Mix/B4U/b4u.png
+      Songs/Dance Dance Revolution 4th +Mix/B4U/b4u-movie.avi
+
+StepMania supports the SM, DWI, BMS, and KSF song file formats. If the song file +format is BMS or KSF, simply put all the KSF or BMS files into the song folder.
+
+If a song file does not specify a valid banner file, StepMania first looks for a +graphic in the song folder that contains the word "banner". If that search +fails, StepMania will guess which image is most appropriate.
+
+If a song file does not specify a valid background file, StepMania first looks +for a graphic in the song folder that contains the words "bg" or "background". +If that search fails, StepMania will guess which image is most appropriate.
+
+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 there is exactly one movie in the song folder, StepMania will insert a +background change to that movie at the moment the music starts.
+
+
+************************************************************
+Connecting Dance Pads
+************************************************************
+
+There are several devices that allow you to connect PlayStation dance pads to +your PC.
+
+* Not recommended: generic PlayStation->USB converter
+
+Using a generic PlayStation->USB converter is not recommended to play any +dancing game on the PC. The vast majority of these converters are not capable of +registering simultaneous presses of Left+Right or Up+Down. This restriction will +cause the player to miss many notes where two buttons must be hit +simultaneously.
+
+* Highly Recommended: specific brands of PlayStation->USB adaptor
+
+There is just one brand of PlayStation->USB adaptor that functions perfectly +with StepMania. These adaptors are available for purchase through some importers +(www.liksang.com). The adaptor is made by "Boom", and it small and black with a +detachable USB cable. These adaptors cost about $15 and allow you to attach one +dance pad per adaptor. The primary advantage of these adaptors is that they do +not require special drivers and require no configuring.
+
+* Semi-Recommended: PlayStation->Parallel adaptor
+
+PlayStation->Parallel converters do not have the simultaneous button problem +that USB converters do. The disadvantage of these adaptors is that home-made
+drivers are required to use these devices. These drivers are often finicky and +incompatible with some sound cards. PlayStation->Parallel adaptors can be +purchased from the StepMania web site or any importer.
+
+For Windows 98 and Windows Me users, the recommended driver is "DirectPad +Pro 5.0 for Win9x". For Windows 2000 and Windows XP, the recommended drivers +is NTPad XP 1.x or +PSXPAD.
+
+StepMania now natively supports USB Pump It Up pads.

+


+************************************************************
+Compatibility Issues
+************************************************************
+
+Some video card/driver combinations have visual errors when running StepMania. +If you experience any visual errors, please visit your video card manufacturer's +web site and download the latest Direct3D 8.1 drivers. Below is a list of known +issues that are thought to be video card driver bugs:
+
+* S3 Savage family cards (e.g. Diamond Stealth)
+Symptom: The right edge of some graphics appears "cut off".
+Explanation: Drivers do not properly handle textures >= 512x512, resulting in +cropped textures. Turn the texture detail option to 256 to force textures to a +smaller size.
+
+* SiS cards
+Symptom: Garbled fonts.
+Explanation: Drivers have errors in handling texture coordinates. Only known +solution is to upgrade drivers.
+
+* Any card older than two years
+Symptom: Various graphical glitches.
+Explanation: These problems are most often caused by buggy video card drivers +bugs. Please upgrade to the latest drivers, which will hopefully fix the errors.
+
+
+************************************************************
+FAQ / Troubleshooting
+************************************************************
+
+* The error "Cannot find Dinput8.dll" appears when launching the game.
+
+You need to download DirectX 8.1. http://www.microsoft.com/directx
+
+* StepMania reports "Direct3DCreate failed".
+
+You need to download DirectX 8.1. http://www.microsoft.com/directx
+
+* StepMania reports "Direct3DCreateDevice failed".
+
+This error means that your video card or drivers do not support Direct3D 8. +Download the latest drivers for your video card. If your video card is older +than 2 or 3 years, Direct3D 8 drivers may not be available. Sorry.
+
+* Music rates of over 100% do not work on my computer. Why?
+
+Some very old sound cards do not support sound playback rates that are greater +than the original sample rate. This problem is likely to be corrected by newer +sound card drivers.
+
+* I’m looking to purchase a video card. What works well with StepMania?
+
+Just about any video card manufactured in the last year will run StepMania +flawlessly at 60 frames per second. I recommend any card with an nVidia GeForce +chip or an ATI Radeon chip.
+
+* How can I improve performance with my existing video card
+
+1. Install the latest drivers for your video card.
+2. Press F5 in the game to toggle between high detail and low detail modes.
+3. Tweak the Display Resolution and Texture Resolution setting in the +Options->Graphic Options screen.
+
+* Will you tell me when the next version will be released?
+
+Nope, Sorry. It's gotten me in trouble before.
+
+* Why won't you tell me? I promise I won't tell anyone else.
+
+The reasons I won't tell is because: a) I don't know yet, and b) I don't want to +make anyone angry if it takes longer than expected (it usually does).
+
+
+************************************************************
+StepMania Packages - .smzip
+************************************************************
+
+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 +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 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.
+
+
+************************************************************
+Questions, Bugs, Suggestions, +and Help
+************************************************************
+
+If you have a question about or problem with StepMania, please first ask your +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). +This will allow the developers to track and fix bugs much more efficiently.  
+
+* In a bug report, please specify your video card brand and model, and your OS +version (Win98, WinXP, etc).
+* PLEASE, PLEASE enter your e-mail address on the bug reports. In many cases, we +need more information from the bug reporter.
+
+Please use + +SourceForge's feature request system to enter new feature requests. Also, +please discuss feature ideas on the + +StepMania message board or the +StepMania
+developers list
.  
+
+If you would like to help with development of StepMania, please send an email to +the StepMania developers list +or to Chris.
+
+
+************************************************************
+The StepMania editor
+************************************************************
+
+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.
+
+Following are a few basic commands that you will find useful in learning to use +the 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)
+
+
+************************************************************
+The .SM file format
+************************************************************
+
+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 syntax +of a .SM is similar to .DWI and .KSF except that some tags are different.
+
+(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. Supports for UTF-8 foreign +characters.
+#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.
+#TITLETRANSLIT:...; - Transliteration of song's main title for sorting
+#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.
+#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.
+#MUSIC:...; - The file name of the music file. e.g. "b4u.mp3". This image must +reside in the song folder.
+#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. "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".
+#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".
+#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 a new background named 'bg name'. 'beat' is +a fractional value value and 'bg name' is a string. Different bg changes 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. You must +include the file extension in "bg name". e.g. "60=falling.avi,80=flower.mpg".
+- 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. You +must include the file extension in "bg name". e.g. "60=falling.avi,80=flower.mpg".
+- 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 the same basic format:
+
+#NOTES:<NotesType>:<Description>:<DifficultyClass>:<DifficultyMeter>:<RadarValues>:<NoteData>;
+
+NotesType: Must be one of the currently supported types in StepMania: +"dance-single", "dance-double", "dance-couple", "dance-solo", "pump-single", +"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", "Challenge", +"SManaic"
+
+DifficultyClass: This value must be "easy", "medium", or "hard". These values +correspond the levels of difficulty on the Select Difficulty screen.
+
+DifficultyMeter: The difficulty of these notes as a bar rating. The value must +be an integer between 1 and 10.
+
+RadarValues: The values that will be displayed on the Groove Radar as floats +between 0.00 and 1.00. The 5 values must be separated by commas, and are +specified in the order: "stream,voltage,air,freeze,chaos". For MAX300, these +values are "0.95,0.98,0.22,0.12,0.13". These values will automatically be +written when you save the song in the StepMania editor, but you may edit the .SM +file afterward to tweak them.
+
+NoteData: This value requires a longer explanation.
+
+Each note is represented by a character:
+
+0 = no note here
+1 = a regular "tap note"
+2 = beginning of a "hold note"
+3 = end of a "hold note"
+a-z,A-z = tap notes reserved for game types that have sounds associated with +notes
+
+Notes that are hit at the same time are grouped into rows. For example, if the +NotesType is "dance-single", the row "1001" would specify that both the Left and +Right and Down panels should be hit at the same time.
+
+The number of notes per row (also called the number of 'columns') depends on the +"NotesType.
+
+dance-single = 4 notes/row (Left,Down,Up,Right)
+dance-double = 8 notes/row
+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 4 +note rows in a measure, each note will be treated as a quarter note. If there +are 8 notes rows in a measure, each note will be treated as a eighth note. If +there are 12 notes rows in a measure, each note will be treated as a triplet +(1/12th) note. Measures are separated by a comma.
+
+Example:
+
+// measure 1
+2010
+0000
+0100
+0000
+: // measure 2
+0001
+0100
+0001
+0000
+3010
+0000
+0000
+0000
+;
+
+************************************************************
+Backgrounds
+************************************************************
+
+StepMania supports three different modes of backgrounds. The default background +mode can be set in the Graphic Options menu.
+
+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.
+
+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.
+
+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 choppiness on slower +computers.
+
+Sample animations, visualizations, and random movies can be found at +www.stepmania.com.
+
+
+************************************************************
+BGAnimations Format
+************************************************************
+
+The BGAnimations folder in the StepMania program directory may contain several +BGAnimation folders.
+
+\BGAnimations\<anim folder>\<layer files>
+
+<anim folder> is the name of the animation.
+
+<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 +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:
+
+BGAnimations\flower\1 TileScrollUp.png
+BGAnimations\flower\2 StartOnRandomFrame ParticlesFloatDown 1x2.png
+BGAnimations\flower\3 TileScrollLeft CycleColor 2x2.png
+
+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:
+
+UseSongBg - Use the song's background file instead of this graphics file. Since +this graphics file is merely a placeholder, you might want to make this graphic +a 1x1 graphic to save disk space.
+
+Add - use additive blending instead of normal blending.
+
+CycleColor - cycle the color of the layer over the colors of the rainbow
+
+CycleAlpha - cycle the alpha channel of the layer over type
+
+StartOnRandomFrame - Start the animation on a random frame. This is mainly +useful for Tile or Particle effects.
+
+DontAnimate - Stay on the first frame of this animation. This is only useful for +layers with multiple frames.
+
+(stretch effects) - These scretch the graphic across the extire screen.
+ScretchScrollLeft,
+StretchScrollRight,
+StretchScrollUp,
+StretchScrollDown,
+- Scroll the layer in a direction
+
+StretchWater,
+StretchBubble,
+StretchTwist,
+StretchSpin,
+- Deform the background sprite with an effect. Only stretch spin is currently +implemented.
+
+(particle effects) - Use the graphic to make individual particles on the screen.
+ParticlesSpiralOut,
+ParticlesSpiralIn,
+- Spiral particles away from/toward the center of the screen.
+
+ParticlesFloatUp,
+ParticlesFloatDown,
+ParticlesFloatLeft,
+ParticlesFloatRight,
+- Scroll the particles across the screen.
+ParticlesBounce,
+- Particles start traveling in random directions and bounce when they hit the +edge of the screen.
+
+(tile effects) - Tile the graphics across the screen, forming a grid of +graphics.
+TileStill,
+TileScrollLeft,
+TileScrollRight,
+TileScrollUp,
+TileScrollDown,
+- Scroll the tiles
+
+TileFlipX,
+TileFlipY,
+- Flip the tiles along the X or Y axis.
+
+TilePulse,
+- Tiles zoom in and out.
+
+
+************************************************************
+The .CRS File Format
+************************************************************
+
+CRS files define the courses used in the "Oni" Nonstop Challenge mode. All CRS +files must reside in the "Courses" folder in the StepMania program folder.
+
+#COURSE:...; - name of the course
+#LIVES:<0..10>; - An integer between 0 and 10. This line is optional.
+#REPEAT:<YES|NO>; - start over after last stage?
+#SONG:<group folder>\<song folder>:<description>[:modifiers]; -
+group folder - The name of the folder that contains the song folder.
+song folder - the name of the folder that contains files for the song
+description - BASIC, TRICK, SSR, MANIAC, HEAVY, etc.
+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, blink
+mirror, left, right, shuffle, supershuffle
+little
+reverse
+note, flat, plain
+noholds
+nofreeze
+dark
+norecover, suddendeath, power-drop, death
+0.7xmusic, 0.8xmusic, 0.9xmusic, 1.0xmusic, 1.1xmusic,
+1.2xmusic, 1.3xmusic, 1.4xmusic, 1.5xmusic
+
+
+************************************************************
+Extra Stages
+************************************************************
+
+You can manually specify extra stages for each song group by creating .CRS 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".
+
+
+************************************************************
+Creating an Announcer
+************************************************************
+
+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". 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. "everybodys +waiting for you.mp3"). If there are 0 sound files in a trigger 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.
+
+
+************************************************************
+Creating a Note Skin
+************************************************************
+
+Note skins allow you to customize the way notes appear. Note skins must 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, you must +implement the folling files for each note:
+
+<NoteName> receptor (2x1).png
+<NoteName> tap parts (2xN).png
+<NoteName> tap explosion bright (NxN).png
+<NoteName> tap explosion dim (NxN).png
+<NoteName> note color part (NxN).png
+<NoteName> note gray part (NxN).png
+<NoteName> hold parts (4x2).png
+<NoteName> hold explosion (NxN).png
+<NoteName> tap.colors
+
+"<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 for +each game.
+
+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.
+
+
+************************************************************
+Creating a Theme
+************************************************************
+
+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:
+
+Themes\<ThemeName>\BGAnimations\
+Themes\<ThemeName>\Fonts\
+Themes\<ThemeName>\Graphics\
+Themes\<ThemeName>\Numbers\
+Themes\<ThemeName>\Sounds\
+Themes\<ThemeName>\metrics.ini\
+
+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:
+
+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 at their site. 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 of 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).
+Top=<0..63>: This indicates the top of a typical capital letter, from the top of +the frame. If not specified, this will be derived from LineSpacing.
+Baseline=<0..63>: This indicates the baseline of the font, from the top of the +frame. If not specified, the baseline is derived from LineSpacing.
+
+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.
+
+
+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.
+
+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".
+
+
+************************************************************
+How StepMania Loads 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" +interchangeably.
+
+
+* 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 called +"title menu logo.png" that you would like to turn into an animation. Now, you +create an graphic file with 9 frames of animation - 3 frames wide 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?
+
+.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 may specify: 1) +What frame of the graphic to show, and 2) how long to show this state before +moving to the next state.
+
+Let's look at an example .sprite file:
+
+[Sprite]
+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 texture file to use. This must reside in the same +directory as the .sprite file. If your texture has multiple frames, be sure to +specify the dimensions in the file name using the convention described above.
+
+FrameNNNN is the index of the frame number to use for the first state of the +animation. Frame may range between 0 and (total number of frames - 1).  +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?
+
+Change your PNG images to use "palette mode" instead of "RGB mode".  +Paletted images have three advantages:
+- StepMania can load paletted images with higher color precision than RGB +images.
+- paletted images use much less texture memory than RGB images.
+- paletted images often have a smaller file size than an equivalent RGB mode +image.
+
+However, paletted PNGs have a couple limitations:
+- they support you to only "on/off" alpha.
+- they support a maxiumum of 256 colors.  This can make smooth gradients +look ugly.
+
+
+* Why do the graphics look so blurry?
+
+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.
+
+
+************************************************************
+Building StepMania from CVS source
+************************************************************
+
+CVS is the repository that manages the StepMania source code. Our CVS server is +graciously provided by SourceForge. You can get the absolute-latest bleeding +edge updates to StepMania by taking the source from CVS. Below are instructions +on how to configure your computer to download source code from CVS and compile +the source into a working executable. If you do not have a basic understanding +of how to build a program using Visual C++, then you probably should not attempt +to build StepMania.
+
+* Step 1: Install and configure Visual C++
+
+The StepMania source can currently be built with Microsoft Visual C++ 6.0 or +Visual C++ .Net. Installing Visual C++ or Visual Studio with all the default +options is sufficient.
+
+* Step 2: Install the Direct X 8.1 SDK
+
+The DirectX 8.1 SDK is a + +free download from Microsoft. Install it using all the default settings. The +SDK installer will configure Visual C++ with the correct paths needed to find +the DirectX 8.1 libraries and headers.
+
+* Step 3: Create a SourceForge account
+
+In order to commit changes to CVS, you'll have to have a SourceForge account. +Create an account with +SourceForge, then e-mail Chris +with your username so he can add you to the project.
+
+* Step 4: Install WinCVS
+
+A CVS client is required to "checkout" the course from the CVS server. Download +latest stable version (1.2) of WinCVS here +or here.
+
+IMPORTANT: Now, open and close WinCVS once. This will cause WinCVS to create +registry entries, which is required for the next step...
+
+* Step 5: Use SourceForge Setup to install SSH and configure WinCVS
+
+A small utility called SourceForge Setup will greatly simplify the steps needed +to configure SSH and WinCVS. Download SourceForge Setup +here. Use the following settings +when prompted by SF Setup:
+
+- Unpack SSH directory: c:\ssh
+- SSH install direcotory: c:\ssh
+- Your home directory: c:\ssh
+- Your SourceForge user name: -yourusername-
+- Name of the project: stepmania
+- The directory where you will be keeping checked out project sources: c:\stepmania
+
+IMPORTANT: If you are using Windows 2000 or Windows XP SourceForge Setup will +not correctly write changes to the c:\autoexec.bat file. Verify that the +following lines are present after you run SF Setup:
+
+rem SourceForge setup stuff
+SET PATH=%PATH%;c:\ssh
+SET HOME=c:\ssh
+
+IMPORTANT: You must restart after running SF Setup so that the new environment +variables take effect.
+
+* Step 6: Enable SSH access to the cvs machine
+
+Before you can use your account, you must run the following (substituting your +username and projectname as appropriate) before attempting to use CVS from a new +user account. Open a command prompt, and type:
+
+ssh -l username cvs.stepmania.sourceforge.net
+
+Enter your password, and you'll get a message about how you're not supposed to +be there and the connection will drop. What they don't tell you is that this +creates your home directory and is required for things to start working.
+
+* Step 7: "Checkout" the source code
+
+- Open up WinCVS again.
+- In the right pane, you should see the folder "stepmania".
+- Right click on that folder and choose "Checkout module...". For the module +name enter "stepmania".
+- Click OK.
+- If a "chose your home directory" window appears, select "c:\stepmania".
+- A minimized console window should appear. Unminimize it, type in your +SourceForge password, and press Enter.
+- The source code should begin downloading. This can take a long time depending +on your connection speed.
+
+* Optional: Create the SSH keypair for painless access to CVS server via SSH. +
+
+Open a command prompt and enter this to create a new key pair:
+
+ssh-keygen -C <comment> -f identity
+
+<comment> is an identifier placed in the public key. I used my email address. +Just press enter when it asks you for a passphrase. You don't want a passphrase. +BTW, without the -C option the program will fail and you won't get a new key +pair. I couldn't use any other ssh-keygen utility except for this one. Any other +(SecureCRT, or the linux server) and ssh.exe wouldn't read it.
+
+Next, on your user account page at SourceForge, you should find a box to enter +your SSH public key. Copy the entire contents of the identity.pub file (located +in your .ssh directory) into the text entry box on the page -- be sure not to +add any line breaks or it will not work. After a 6 hour wait, you should be able +to use CVS with SSH without using your password.
+
+(Meanwhile...)
+Copy the file "identity" (no extension) to c:\ssh\.ssh\
+
+Create a new file called ssh.bat in your ssh directory (c:\ssh\) with +notepad and dump these contents into it:
+
+@echo off
+rem echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 > debug.txt
+ssh.exe -C -l %3 -i c:\ssh\.ssh\identity %1 %4
+
+Open WinCVS.  In Admin->Preferences...->Ports tab, check 'Check for an alternate RSH name' +and put "ssh.bat" into the editbox.
+
+* All done!  Congrats.
+
+
+************************************************************
+Thanks
+************************************************************
+
+Thanks to:
+redcrusher for help on ez2 graphics
+Dj Slash & Tony Thai for the caution graphic
+Kyle "KeeL" Ward for his awesome menu music (www.ampcast.com/keel)
+
+
+************************************************************
+End of document
+************************************************************

+ + + + \ No newline at end of file diff --git a/stepmania/TODO.chris b/stepmania/TODO.chris index 3dbaa2eab6..a1cee798b6 100644 --- a/stepmania/TODO.chris +++ b/stepmania/TODO.chris @@ -2,6 +2,8 @@ Fix ///////////////////////// +Is there a way to turn off the "keep bpm/gap change" screen, when AutoAdjust is turned on? + background videos out of sync at non-1 song rates Hrm.. I had a few things about Stepmania I wanted to suggest, but can't think of all of them now.. Lemme list the ones I can remember: diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 81838b4dc0..b515d8cb77 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -489,7 +489,7 @@ RouletteSlowDownSwitches=5 LockedInitialVelocity=7 ScrollBarX=148 ScrollBarHeight=368 -ItemCurveX=95 +ItemCurveX=85 ItemSpacingY=46 NumSectionColors=7 SectionColor1=0.9, 0.0, 0.2, 1 diff --git a/stepmania/src/NoteDisplay.cpp b/stepmania/src/NoteDisplay.cpp index eb1682f4be..dca9f332ef 100644 --- a/stepmania/src/NoteDisplay.cpp +++ b/stepmania/src/NoteDisplay.cpp @@ -23,20 +23,68 @@ #include "RageLog.h" #include #include "RageDisplay.h" +#include "NoteTypes.h" +#define DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW GAMEMAN->GetMetricB("NoteDisplay","DrawHoldHeadForTapsOnSameRow") +#define TAP_NOTE_ANIMATION_LENGTH_IN_BEATS GAMEMAN->GetMetricF("NoteDisplay","TapNoteAnimationLengthInBeats") +#define HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS GAMEMAN->GetMetricF("NoteDisplay","HoldHeadAnimationLengthInBeats") +#define HOLD_BODY_ANIMATION_LENGTH_IN_BEATS GAMEMAN->GetMetricF("NoteDisplay","HoldBodyAnimationLengthInBeats") +#define HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS GAMEMAN->GetMetricF("NoteDisplay","HoldTailAnimationLengthInBeats") +#define TAP_NOTE_ANIMATION_IS_VIVID GAMEMAN->GetMetricB("NoteDisplay","TapNoteAnimationIsVivid") +#define HOLD_HEAD_ANIMATION_IS_VIVID GAMEMAN->GetMetricB("NoteDisplay","HoldHeadAnimationIsVivid") +#define HOLD_BODY_ANIMATION_IS_VIVID GAMEMAN->GetMetricB("NoteDisplay","HoldBodyAnimationIsVivid") +#define HOLD_TAIL_ANIMATION_IS_VIVID GAMEMAN->GetMetricB("NoteDisplay","HoldTailAnimationIsVivid") +#define TAP_NOTE_ANIMATION_IS_NOTE_COLOR GAMEMAN->GetMetricB("NoteDisplay","TapNoteAnimationIsNoteColor") +#define HOLD_HEAD_ANIMATION_IS_NOTE_COLOR GAMEMAN->GetMetricB("NoteDisplay","HoldHeadAnimationIsNoteColor") +#define HOLD_BODY_ANIMATION_IS_NOTE_COLOR GAMEMAN->GetMetricB("NoteDisplay","HoldBodyAnimationIsNoteColor") +#define HOLD_TAIL_ANIMATION_IS_NOTE_COLOR GAMEMAN->GetMetricB("NoteDisplay","HoldTailAnimationIsNoteColor") +#define START_DRAWING_HOLD_BODY_OFFSET_FROM_HEAD GAMEMAN->GetMetricI("NoteDisplay","StartDrawingHoldBodyOffsetFromHead") +#define STOP_DRAWING_HOLD_BODY_OFFSET_FROM_TAIL GAMEMAN->GetMetricI("NoteDisplay","StopDrawingHoldBodyOffsetFromTail") +#define HOLD_HEAD_IS_WAVY GAMEMAN->GetMetricB("NoteDisplay","HoldHeadIsWavy") +#define HOLD_TAIL_IS_WAVY GAMEMAN->GetMetricB("NoteDisplay","HoldTailIsWavy") +#define HOLD_NG_GRAY_PERCENT GAMEMAN->GetMetricF("NoteDisplay","HoldNGGrayPercent") + // cache -bool g_bDrawHoldHeadForTapsOnSameRow, g_bDrawTapOnTopOfHoldHead, g_bDrawTapOnTopOfHoldTail; -float g_fTapAnimationLengthInBeats; -float g_bAllowVivid; +bool g_bDrawHoldHeadForTapsOnSameRow; +float g_fTapNoteAnimationLengthInBeats; +float g_fHoldHeadAnimationLengthInBeats; +float g_fHoldBodyAnimationLengthInBeats; +float g_fHoldTailAnimationLengthInBeats; +bool g_bTapNoteAnimationIsVivid; +bool g_bHoldHeadAnimationIsVivid; +bool g_bHoldBodyAnimationIsVivid; +bool g_bHoldTailAnimationIsVivid; +bool g_bTapNoteAnimationIsNoteColor; +bool g_bHoldHeadAnimationIsNoteColor; +bool g_bHoldBodyAnimationIsNoteColor; +bool g_bHoldTailAnimationIsNoteColor; +int g_iStartDrawingHoldBodyOffsetFromHead; +int g_iStopDrawingHoldBodyOffsetFromTail; +bool g_bHoldHeadIsWavy; +bool g_bHoldTailIsWavy; +float g_fHoldNGGrayPercent; NoteDisplay::NoteDisplay() { - g_bDrawHoldHeadForTapsOnSameRow = GAMEMAN->GetMetricB( "NoteDisplay", "DrawHoldHeadForTapsOnSameRow" ); - g_bDrawTapOnTopOfHoldHead = GAMEMAN->GetMetricB( "NoteDisplay", "DrawTapOnTopOfHoldHead" ); - g_bDrawTapOnTopOfHoldTail = GAMEMAN->GetMetricB( "NoteDisplay", "DrawTapOnTopOfHoldTail" ); - g_fTapAnimationLengthInBeats = GAMEMAN->GetMetricF( "NoteDisplay", "TapAnimationLengthInBeats" ); - g_bAllowVivid = GAMEMAN->GetMetricB( "NoteDisplay", "AllowVivid" ); + g_bDrawHoldHeadForTapsOnSameRow = DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW; + g_fTapNoteAnimationLengthInBeats = TAP_NOTE_ANIMATION_LENGTH_IN_BEATS; + g_fHoldHeadAnimationLengthInBeats = HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS; + g_fHoldBodyAnimationLengthInBeats = HOLD_BODY_ANIMATION_LENGTH_IN_BEATS; + g_fHoldTailAnimationLengthInBeats = HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS; + g_bTapNoteAnimationIsVivid = TAP_NOTE_ANIMATION_IS_VIVID; + g_bHoldHeadAnimationIsVivid = HOLD_HEAD_ANIMATION_IS_VIVID; + g_bHoldBodyAnimationIsVivid = HOLD_BODY_ANIMATION_IS_VIVID; + g_bHoldTailAnimationIsVivid = HOLD_TAIL_ANIMATION_IS_VIVID; + g_bTapNoteAnimationIsNoteColor = TAP_NOTE_ANIMATION_IS_NOTE_COLOR; + g_bHoldHeadAnimationIsNoteColor = HOLD_HEAD_ANIMATION_IS_NOTE_COLOR; + g_bHoldBodyAnimationIsNoteColor = HOLD_BODY_ANIMATION_IS_NOTE_COLOR; + g_bHoldTailAnimationIsNoteColor = HOLD_TAIL_ANIMATION_IS_NOTE_COLOR; + g_iStartDrawingHoldBodyOffsetFromHead = START_DRAWING_HOLD_BODY_OFFSET_FROM_HEAD; + g_iStopDrawingHoldBodyOffsetFromTail = STOP_DRAWING_HOLD_BODY_OFFSET_FROM_TAIL; + g_bHoldHeadIsWavy = HOLD_HEAD_IS_WAVY; + g_bHoldTailIsWavy = HOLD_TAIL_IS_WAVY; + g_fHoldNGGrayPercent = HOLD_NG_GRAY_PERCENT; } @@ -44,46 +92,99 @@ void NoteDisplay::Load( int iColNum, PlayerNumber pn ) { m_PlayerNumber = pn; - CString sTapPath = GAMEMAN->GetPathTo(iColNum, "tap parts"); - m_sprTap.Load( sTapPath ); - m_sprTap.StopAnimating(); - m_sprTap.TurnShadowOff(); - - CString sHoldPartsPath = GAMEMAN->GetPathTo(iColNum, "hold parts 4x2"); - m_sprHoldParts.Load( sHoldPartsPath ); - if( m_sprHoldParts.GetTexture()->GetFramesWide() != 4 || m_sprHoldParts.GetTexture()->GetFramesHigh() != 2 ) - RageException::Throw( "Hold Parts '%s' must have 4x2 frames.", sHoldPartsPath.GetString() ); - m_sprHoldParts.StopAnimating(); - m_sprHoldParts.TurnShadowOff(); - - return; + m_sprTapNote.Load( GAMEMAN->GetPathTo(iColNum, "tap note") ); + m_sprHoldHeadActive.Load( GAMEMAN->GetPathTo(iColNum, "hold head active") ); + m_sprHoldHeadInactive.Load( GAMEMAN->GetPathTo(iColNum, "hold head inactive") ); + m_sprHoldBodyActive.Load( GAMEMAN->GetPathTo(iColNum, "hold body active") ); + m_sprHoldBodyInactive.Load( GAMEMAN->GetPathTo(iColNum, "hold body inactive") ); + m_sprHoldTailActive.Load( GAMEMAN->GetPathTo(iColNum, "hold tail active") ); + m_sprHoldTailInactive.Load( GAMEMAN->GetPathTo(iColNum, "hold tail inactive") ); } -int NoteDisplay::GetTapFrameNo( const float fNoteBeat ) +int NoteDisplay::GetFrameNo( float fNoteBeat, int iNumFrames, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor ) { - const int iNumFrames = m_sprTap.GetNumStates(); - float fSongBeat = GAMESTATE->m_fSongBeat; - float fPercentIntoMeasure = fmodf( fSongBeat, g_fTapAnimationLengthInBeats ) / g_fTapAnimationLengthInBeats; - int iSongBeatFrameContrib = (int)roundf( fPercentIntoMeasure * iNumFrames ); + float fPercentIntoMeasure = fmodf( fSongBeat, fAnimationLengthInBeats ) / fAnimationLengthInBeats; float fBeatFraction = fmodf( fNoteBeat, 1.0f ); - fBeatFraction = froundf( fBeatFraction, 0.25f ); + fBeatFraction = froundf( fBeatFraction, 0.25f ); // round to nearest 1/4th + int iBeatFractionContrib = (int)roundf( fBeatFraction * iNumFrames ); + int iSongBeatFrameContrib = (int)roundf( fPercentIntoMeasure * iNumFrames ); int iFrameNo; - if( g_bAllowVivid && GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_ColorType == PlayerOptions::COLOR_VIVID ) + if( bVivid ) + { iFrameNo = (iSongBeatFrameContrib + iBeatFractionContrib) % iNumFrames; - else - iFrameNo = (iSongBeatFrameContrib) % iNumFrames; - - if( iFrameNo < 0 ) - iFrameNo += iNumFrames; + } + else if( bNoteColor ) + { + NoteType type = BeatToNoteType( fNoteBeat ); + int iBaseFrameNo; + switch( type ) + { + case NOTE_TYPE_4TH: iBaseFrameNo = iNumFrames*0/6; break; + case NOTE_TYPE_8TH: iBaseFrameNo = iNumFrames*1/6; break; + case NOTE_TYPE_12TH: iBaseFrameNo = iNumFrames*2/6; break; + case NOTE_TYPE_16TH: iBaseFrameNo = iNumFrames*3/6; break; + case NOTE_TYPE_24TH: iBaseFrameNo = iNumFrames*4/6; break; + case NOTE_TYPE_32ND: iBaseFrameNo = iNumFrames*5/6; break; + default: ASSERT(0); iBaseFrameNo=0; // get rid of warning + } + iFrameNo = iBaseFrameNo + iBeatFractionContrib; + } + else // flat + { + iFrameNo = (iSongBeatFrameContrib) % iNumFrames; + } + + ASSERT( iFrameNo>=0 && iFrameNom_PlayerOptions[m_PlayerNumber].m_bReverseScroll; const int iCol = hn.m_iTrack; - const float fStartYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fStartBeat ); - const float fStartYPos = ArrowGetYPos( m_PlayerNumber, fStartYOffset ); - const float fEndYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fEndBeat ); - const float fEndYPos = ArrowGetYPos( m_PlayerNumber, fEndYOffset ); - - // draw from bottom to top - const float fFrameWidth = m_sprHoldParts.GetUnzoomedWidth(); - const float fFrameHeight = m_sprHoldParts.GetUnzoomedHeight(); - const float fBodyHeight = fFrameHeight*2; + const float fStartYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fStartBeat ); + const float fStartYPos = ArrowGetYPos( m_PlayerNumber, fStartYOffset ); + const float fEndYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fEndBeat ); + const float fEndYPos = ArrowGetYPos( m_PlayerNumber, fEndYOffset ); const float fYHead = bReverse ? fEndYPos : fStartYPos; // the center of the head const float fYTail = bReverse ? fStartYPos : fEndYPos; // the center the tail - const float fYHeadTop = fYHead-fFrameHeight/2; - const float fYHeadBottom = fYHead+fFrameHeight/2; + const int fYStep = 16; // 16 logical pixels per segment - const float fYTailTop = fYTail-fFrameHeight/2; - const float fYTailBottom = fYTail+fFrameHeight/2; + const float fColorScale = 1*fLife + (1-fLife)*g_fHoldNGGrayPercent; - const float fYBodyTop = g_bDrawTapOnTopOfHoldHead ? fYHeadBottom : fYHead; // middle of head - const float fYBodyBottom = fYTailTop; // top of tail - const int fYStep = int(fFrameHeight)/4; // 4 segments per frame - - DISPLAY->SetTexture( m_sprHoldParts.GetTexture() ); - DISPLAY->SetBlendModeNormal(); - if( bDrawGlowOnly ) - DISPLAY->SetTextureModeGlow(); - else - DISPLAY->SetTextureModeModulate(); - DISPLAY->EnableTextureWrapping(); + // + // draw from tail to head (so head appears on top) + // static RageVertex queue[4096]; - RageVertex *v=&queue[0]; // // Draw the tail // - float fY; - // HACK: +0.05 below to try and get rid of ugly border at top of tail - for( fY=max(fYTailTop-0.05f,fYHead); fY 1 && fTexCoordBottom > 1 ) + Sprite* pSprTail = bActive ? &m_sprHoldTailActive : &m_sprHoldTailInactive; + int iFrameNo = GetHoldTailFrameNo( hn.m_fStartBeat, bActive ); + + if( g_bHoldTailIsWavy ) { - fTexCoordTop -= (int)fTexCoordTop; - fTexCoordBottom -= (int)fTexCoordTop; + // draw manually in small segments + RageVertex *v = &queue[0]; + RageTexture* pTexture = pSprTail->GetTexture(); + const RectF* pRect = pTexture->GetTextureCoordRect( iFrameNo ); + DISPLAY->SetTexture( pTexture ); + DISPLAY->SetBlendModeNormal(); + if( bDrawGlowOnly ) + DISPLAY->SetTextureModeGlow(); + else + DISPLAY->SetTextureModeModulate(); + DISPLAY->DisableTextureWrapping(); + + + const float fFrameWidth = pSprTail->GetUnzoomedWidth(); + const float fFrameHeight = pSprTail->GetUnzoomedHeight(); + const float fYTailTop = fYTail-fFrameHeight/2; + const float fYTailBottom = fYTail+fFrameHeight/2; + + float fY=max( fYTailTop, fYHead ); // don't draw any part of the tail that is before the middle of the head + for( ; fYtop, pRect->bottom ); + const float fTexCoordBottom = SCALE( fBottomDistFromTailTop, 0, fFrameHeight, pRect->top, pRect->bottom ); + const float fTexCoordLeft = pRect->left; + const float fTexCoordRight = pRect->right; + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail ); + const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); + const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); + const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); + const RageColor colorGlowBottom = RageColor(1,1,1,fGlowBottom); + + if( bDrawGlowOnly && colorGlowTop.a==0 && colorGlowBottom.a==0 ) + continue; + if( !bDrawGlowOnly && colorDiffuseTop.a==0 && colorDiffuseBottom.a==0 ) + continue; + + v[0].p = RageVector3(fXTopLeft, fYTop, 0); v[0].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[0].t = RageVector2(fTexCoordLeft, fTexCoordTop), + v[1].p = RageVector3(fXTopRight, fYTop, 0); v[1].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[1].t = RageVector2(fTexCoordRight, fTexCoordTop); + v[2].p = RageVector3(fXBottomRight,fYBottom,0); v[2].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[2].t = RageVector2(fTexCoordRight, fTexCoordBottom); + v[3].p = RageVector3(fXBottomLeft, fYBottom,0); v[3].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[3].t = RageVector2(fTexCoordLeft, fTexCoordBottom); + v+=4; + } + DISPLAY->DrawQuads( queue, v-queue ); } - ASSERT( fBottomDistFromTailTop-0.001 <= fFrameHeight ); - const float fTexCoordLeft = bActive ? 0.25f : 0.00f; - const float fTexCoordRight = bActive ? 0.50f : 0.25f; - const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop, fPercentFadeToFail ); - const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail ); - const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail ); - const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail ); - const float fColorScale = SCALE(fLife,0,1,0.2f,1); - const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); - const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); - const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); - const RageColor colorGlowBottom = RageColor(1,1,1,fGlowBottom); + else // !g_bHoldTailIsWavy + { + // draw with normal Sprite + const float fY = fYHead; + const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY ); + const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fY, fPercentFadeToFail ); + const float fGlow = ArrowGetGlow( m_PlayerNumber, fY, fPercentFadeToFail ); + const RageColor colorDiffuse= RageColor(fColorScale,fColorScale,fColorScale,fAlpha); + const RageColor colorGlow = RageColor(1,1,1,fGlow); - if( bDrawGlowOnly && colorGlowTop.a==0 && colorGlowBottom.a==0 ) - continue; - if( !bDrawGlowOnly && colorDiffuseTop.a==0 && colorDiffuseBottom.a==0 ) - continue; - - v[0].p = RageVector3(fXTopLeft, fYTop, 0); v[0].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[0].t = RageVector2(fTexCoordLeft, fTexCoordTop), - v[1].p = RageVector3(fXTopRight, fYTop, 0); v[1].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[1].t = RageVector2(fTexCoordRight, fTexCoordTop); - v[2].p = RageVector3(fXBottomRight,fYBottom,0); v[2].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[2].t = RageVector2(fTexCoordRight, fTexCoordBottom); - v[3].p = RageVector3(fXBottomLeft, fYBottom,0); v[3].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[3].t = RageVector2(fTexCoordLeft, fTexCoordBottom); - v+=4; + pSprTail->SetXY( fX, fY ); + pSprTail->SetState( iFrameNo ); + if( bDrawGlowOnly ) + { + pSprTail->SetDiffuse( RageColor(1,1,1,0) ); + pSprTail->SetGlow( colorGlow ); + } + else + { + pSprTail->SetDiffuse( colorDiffuse ); + pSprTail->SetGlow( RageColor(0,0,0,0) ); + } + pSprTail->Draw(); + } } // - // Draw the body + // Draw the body (always wavy) // - for( fY=fYBodyTop; fY<=fYBodyBottom+1; fY+=fYStep ) // top to bottom { - const float fYTop = fY; - const float fYBottom = min( fY+fYStep, fYTailTop+1 ); - const float fXTop = ArrowGetXPos( m_PlayerNumber, iCol, fYTop ); - const float fXBottom = ArrowGetXPos( m_PlayerNumber, iCol, fYBottom ); - const float fXTopLeft = fXTop - fFrameWidth/2; - const float fXTopRight = fXTop + fFrameWidth/2; - const float fXBottomLeft = fXBottom - fFrameWidth/2; - const float fXBottomRight = fXBottom + fFrameWidth/2; - const float fTopDistFromTailTop = fYTailTop - fYTop; - const float fBottomDistFromTailTop = fYTailTop - fYBottom; - float fTexCoordTop = SCALE( fTopDistFromTailTop, 0, fBodyHeight, 1, 0 ); - float fTexCoordBottom = SCALE( fBottomDistFromTailTop, 0, fBodyHeight, 1, 0 ); - if( fTexCoordTop > 1 && fTexCoordBottom > 1 ) + Sprite* pSprBody = bActive ? &m_sprHoldBodyActive : &m_sprHoldBodyInactive; + int iFrameNo = GetHoldBodyFrameNo( hn.m_fStartBeat, bActive ); + + // draw manually in small segments + RageVertex *v = &queue[0]; + RageTexture* pTexture = pSprBody->GetTexture(); + const RectF* pRect = pTexture->GetTextureCoordRect( iFrameNo ); + DISPLAY->SetTexture( pTexture ); + DISPLAY->SetBlendModeNormal(); + if( bDrawGlowOnly ) + DISPLAY->SetTextureModeGlow(); + else + DISPLAY->SetTextureModeModulate(); + DISPLAY->EnableTextureWrapping(); + + + const float fFrameWidth = pSprBody->GetUnzoomedWidth(); + const float fFrameHeight = pSprBody->GetUnzoomedHeight(); + const float fYBodyTop = fYHead + g_iStartDrawingHoldBodyOffsetFromHead; + const float fYBodyBottom = fYTail + g_iStopDrawingHoldBodyOffsetFromTail; + + // top to bottom + for( float fY=fYBodyTop; fY<=fYBodyBottom+2; fY+=fYStep ) // HACK: +1 to fill gab between body and tail. { - fTexCoordTop -= (int)fTexCoordTop; - fTexCoordBottom -= (int)fTexCoordTop; - } - const float fTexCoordLeft = bActive ? 0.75f : 0.50f; - const float fTexCoordRight = bActive ? 1.00f : 0.75f; - const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop, fPercentFadeToFail ); - const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail ); - const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail ); - const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail ); - const float fColorScale = SCALE(fLife,0,1,0.2f,1); - const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); - const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); - const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); - const RageColor colorGlowBottom = RageColor(1,1,1,fGlowBottom); - - if( bDrawGlowOnly && colorGlowTop.a==0 && colorGlowBottom.a==0 ) - continue; - if( !bDrawGlowOnly && colorDiffuseTop.a==0 && colorDiffuseBottom.a==0 ) - continue; - - v[0].p = RageVector3(fXTopLeft, fYTop, 0); v[0].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[0].t = RageVector2(fTexCoordLeft, fTexCoordTop); - v[1].p = RageVector3(fXTopRight, fYTop, 0); v[1].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[1].t = RageVector2(fTexCoordRight, fTexCoordTop); - v[2].p = RageVector3(fXBottomRight,fYBottom,0); v[2].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[2].t = RageVector2(fTexCoordRight, fTexCoordBottom); - v[3].p = RageVector3(fXBottomLeft, fYBottom,0); v[3].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[3].t = RageVector2(fTexCoordLeft, fTexCoordBottom); - v+=4; - } - DISPLAY->DrawQuads( queue, v-queue ); - v=&queue[0]; - - if( g_bDrawTapOnTopOfHoldHead ) - { - // - // Draw the head - // - float fY; - for( fY=fYHeadTop; fYbottom, pRect->top ); + float fTexCoordBottom = SCALE( fBottomDistFromBodyBottom, 0, fFrameHeight, pRect->bottom, pRect->top ); + if( fTexCoordTop < 0 ) + { + int iToSubtract = (int)fTexCoordTop - 1; + fTexCoordTop -= iToSubtract; + fTexCoordBottom -= iToSubtract; + } + else if( fTexCoordBottom > 2 ) + { + int iToSubtract = (int)fTexCoordBottom; + fTexCoordTop -= iToSubtract; + fTexCoordBottom -= iToSubtract; + } + ASSERT( fTexCoordTop>=0 && fTexCoordBottom>=0 ); + ASSERT( fTexCoordTop<=2 && fTexCoordBottom<=2 ); + const float fTexCoordLeft = pRect->left; + const float fTexCoordRight = pRect->right; + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail ); const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); @@ -265,48 +377,104 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float v[1].p = RageVector3(fXTopRight, fYTop, 0); v[1].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[1].t = RageVector2(fTexCoordRight, fTexCoordTop); v[2].p = RageVector3(fXBottomRight,fYBottom,0); v[2].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[2].t = RageVector2(fTexCoordRight, fTexCoordBottom); v[3].p = RageVector3(fXBottomLeft, fYBottom,0); v[3].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[3].t = RageVector2(fTexCoordLeft, fTexCoordBottom); - DISPLAY->DrawQuad( v ); - } + v+=4; + } + DISPLAY->DrawQuads( queue, v-queue ); } - else + + + // + // Draw the head + // { - // - // Draw head - // + Sprite* pSprHead = bActive ? &m_sprHoldHeadActive : &m_sprHoldHeadInactive; + int iFrameNo = GetHoldHeadFrameNo( hn.m_fStartBeat, bActive ); + + if( g_bHoldHeadIsWavy ) { - fY = fYHead; + // draw manually in small segments + RageVertex *v = &queue[0]; + RageTexture* pTexture = pSprHead->GetTexture(); + const RectF* pRect = pTexture->GetTextureCoordRect( iFrameNo ); + DISPLAY->SetTexture( pTexture ); + DISPLAY->SetBlendModeNormal(); + if( bDrawGlowOnly ) + DISPLAY->SetTextureModeGlow(); + else + DISPLAY->SetTextureModeModulate(); + DISPLAY->EnableTextureWrapping(); + + const float fFrameWidth = pSprHead->GetUnzoomedWidth(); + const float fFrameHeight = pSprHead->GetUnzoomedHeight(); + const float fYHeadTop = fYHead-fFrameHeight/2; + const float fYHeadBottom = fYHead+fFrameHeight/2; + + for( float fY=fYHeadTop; fYtop, pRect->bottom ); + const float fTexCoordBottom = SCALE( fBottomDistFromHeadTop, 0, fFrameHeight, pRect->top, pRect->bottom ); + ASSERT( fTexCoordTop>=0 && fTexCoordBottom<=1 ); + const float fTexCoordLeft = pRect->left; + const float fTexCoordRight = pRect->right; + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail ); + const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); + const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); + const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); + const RageColor colorGlowBottom = RageColor(1,1,1,fGlowBottom); + + if( bDrawGlowOnly && colorGlowTop.a==0 && colorGlowBottom.a==0 ) + continue; + if( !bDrawGlowOnly && colorDiffuseTop.a==0 && colorDiffuseBottom.a==0 ) + continue; + + v[0].p = RageVector3(fXTopLeft, fYTop, 0); v[0].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[0].t = RageVector2(fTexCoordLeft, fTexCoordTop), + v[1].p = RageVector3(fXTopRight, fYTop, 0); v[1].c = bDrawGlowOnly ? colorGlowTop : colorDiffuseTop; v[1].t = RageVector2(fTexCoordRight, fTexCoordTop); + v[2].p = RageVector3(fXBottomRight,fYBottom,0); v[2].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[2].t = RageVector2(fTexCoordRight, fTexCoordBottom); + v[3].p = RageVector3(fXBottomLeft, fYBottom,0); v[3].c = bDrawGlowOnly ? colorGlowBottom : colorDiffuseBottom; v[3].t = RageVector2(fTexCoordLeft, fTexCoordBottom); + v+=4; + } + DISPLAY->DrawQuads( queue, v-queue ); + } + else // !g_bHoldHeadIsWavy + { + // draw with normal Sprite + const float fY = fYHead; const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY ); const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fY, fPercentFadeToFail ); const float fGlow = ArrowGetGlow( m_PlayerNumber, fY, fPercentFadeToFail ); - const float fColorScale = SCALE(fLife,0,1,0.2f,1); const RageColor colorDiffuse= RageColor(fColorScale,fColorScale,fColorScale,fAlpha); const RageColor colorGlow = RageColor(1,1,1,fGlow); -// m_sprHoldParts.SetState( bActive?1:0 ); - // HACK: the border around the edge of on this sprite is super-obvious. - m_sprHoldParts.SetCustomTextureRect( bActive ? RectF(0.251f,0.002f,0.499f,0.498f) : RectF(0.001f,0.002f,0.249f,0.498f) ); - m_sprHoldParts.SetXY( fX, fY ); + pSprHead->SetXY( fX, fY ); + pSprHead->SetState( iFrameNo ); if( bDrawGlowOnly ) { - m_sprHoldParts.SetDiffuse( RageColor(1,1,1,0) ); - m_sprHoldParts.SetGlow( colorGlow ); + pSprHead->SetDiffuse( RageColor(1,1,1,0) ); + pSprHead->SetGlow( colorGlow ); } else { - m_sprHoldParts.SetDiffuse( colorDiffuse ); - m_sprHoldParts.SetGlow( RageColor(0,0,0,0) ); + pSprHead->SetDiffuse( colorDiffuse ); + pSprHead->SetGlow( RageColor(0,0,0,0) ); } - m_sprHoldParts.Draw(); + pSprHead->Draw(); } } - if( g_bDrawTapOnTopOfHoldHead ) - DrawTap( hn.m_iTrack, hn.m_fStartBeat, false, fPercentFadeToFail, fLife ); - if( g_bDrawTapOnTopOfHoldTail ) - DrawTap( hn.m_iTrack, hn.m_fEndBeat, false, fPercentFadeToFail, fLife ); - - // now, draw the glow pass if( !bDrawGlowOnly ) DrawHold( hn, bActive, fLife, fPercentFadeToFail, true ); @@ -320,7 +488,6 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame const float fXPos = ArrowGetXPos( m_PlayerNumber, iCol, fYPos ); const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fYPos, fPercentFadeToFail ); const float fGlow = ArrowGetGlow( m_PlayerNumber, fYPos, fPercentFadeToFail ); - const int iTapFrameNo = GetTapFrameNo( fBeat ); const float fColorScale = SCALE(fLife,0,1,0.2f,1); RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha); RageColor glow = RageColor(1,1,1,fGlow); @@ -337,24 +504,24 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame if( bOnSameRowAsHoldStart && g_bDrawHoldHeadForTapsOnSameRow ) { - // // draw hold head - // - m_sprHoldParts.SetXY( fXPos, fYPos ); - m_sprHoldParts.SetDiffuse( diffuse ); - m_sprHoldParts.SetGlow( glow ); - m_sprHoldParts.StopUsingCustomCoords(); - m_sprHoldParts.SetState( 0 ); - m_sprHoldParts.Draw(); + const int iHoldHeadFrameNo = GetHoldHeadFrameNo( fBeat, false ); + m_sprHoldHeadInactive.SetXY( fXPos, fYPos ); + m_sprHoldHeadInactive.SetDiffuse( diffuse ); + m_sprHoldHeadInactive.SetGlow( glow ); + m_sprHoldHeadInactive.StopUsingCustomCoords(); + m_sprHoldHeadInactive.SetState( iHoldHeadFrameNo ); + m_sprHoldHeadInactive.Draw(); } else { - m_sprTap.SetXY( fXPos, fYPos ); - m_sprTap.SetRotation( fRotation ); - m_sprTap.SetGlow( glow ); - m_sprTap.SetDiffuse( diffuse ); - m_sprTap.SetState( iTapFrameNo ); - m_sprTap.Draw(); + const int iTapFrameNo = GetTapNoteFrameNo( fBeat ); + m_sprTapNote.SetXY( fXPos, fYPos ); + m_sprTapNote.SetRotation( fRotation ); + m_sprTapNote.SetGlow( glow ); + m_sprTapNote.SetDiffuse( diffuse ); + m_sprTapNote.SetState( iTapFrameNo ); + m_sprTapNote.Draw(); } } diff --git a/stepmania/src/NoteDisplay.h b/stepmania/src/NoteDisplay.h index 5f32f3547f..5121c503b8 100644 --- a/stepmania/src/NoteDisplay.h +++ b/stepmania/src/NoteDisplay.h @@ -28,12 +28,21 @@ public: void DrawHold( const HoldNote& hn, const bool bActive, const float fLife, const float fPercentFadeToFail, bool bDrawGlowOnly = false ); protected: - int GetTapFrameNo( const float fNoteBeat ); + int GetFrameNo( float fNoteBeat, int iNumFrames, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor ); + int GetTapNoteFrameNo( float fNoteBeat ); + int GetHoldHeadFrameNo( float fNoteBeat, bool bActive ); + int GetHoldBodyFrameNo( float fNoteBeat, bool bActive ); + int GetHoldTailFrameNo( float fNoteBeat, bool bActive ); PlayerNumber m_PlayerNumber; // to look up PlayerOptions - Sprite m_sprTap; - Sprite m_sprHoldParts; + Sprite m_sprTapNote; + Sprite m_sprHoldHeadActive; + Sprite m_sprHoldHeadInactive; + Sprite m_sprHoldBodyActive; + Sprite m_sprHoldBodyInactive; + Sprite m_sprHoldTailActive; + Sprite m_sprHoldTailInactive; }; #endif diff --git a/stepmania/src/NoteTypes.cpp b/stepmania/src/NoteTypes.cpp index 19798ec1df..b5cb68fc5a 100644 --- a/stepmania/src/NoteTypes.cpp +++ b/stepmania/src/NoteTypes.cpp @@ -53,6 +53,11 @@ NoteType GetNoteType( int iNoteIndex ) else return NOTE_TYPE_INVALID; }; +NoteType BeatToNoteType( float fBeat ) +{ + return GetNoteType( BeatToNoteRow(fBeat) ); +}; + bool IsNoteOfType( int iNoteIndex, NoteType t ) { return GetNoteType(iNoteIndex) == t; diff --git a/stepmania/src/NoteTypes.h b/stepmania/src/NoteTypes.h index f6014d61b6..c01cb999ad 100644 --- a/stepmania/src/NoteTypes.h +++ b/stepmania/src/NoteTypes.h @@ -73,6 +73,7 @@ enum NoteType RageColor NoteTypeToColor( NoteType nt ); float NoteTypeToBeat( NoteType nt ); NoteType GetNoteType( int iNoteIndex ); +NoteType BeatToNoteType( float fBeat ); bool IsNoteOfType( int iNoteIndex, NoteType t ); RageColor GetNoteColorFromIndex( int iNoteIndex ); RageColor GetNoteColorFromBeat( float fBeat ); diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index dca97415ea..b0e50be4f2 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -190,22 +190,26 @@ ScreenEdit::ScreenEdit() m_pNotes = GAMESTATE->m_pCurNotes[PLAYER_1]; - if( m_pNotes == NULL ) - { - m_pNotes = new Notes; - m_pNotes->SetDifficulty(DIFFICULTY_MEDIUM); - m_pNotes->m_NotesType = GAMESTATE->GetCurrentStyleDef()->m_NotesType; - m_pNotes->SetDescription("Untitled"); - // In ScreenEditMenu, the screen preceding this one, - // GAMEMAN->m_CurStyle is set to the target game style - // of the current edit. Naturally, this is where we'll - // want to extract the NotesType for a (NEW) sequence. + /* Make EditMenu responsible for creating new Notes */ + //if( m_pNotes == NULL ) + //{ + // m_pNotes = new Notes; + // m_pNotes->SetDifficulty(DIFFICULTY_MEDIUM); + // m_pNotes->m_NotesType = GAMESTATE->GetCurrentStyleDef()->m_NotesType; + // m_pNotes->SetDescription("Untitled"); + + // // In ScreenEditMenu, the screen preceding this one, + // // GAMEMAN->m_CurStyle is set to the target game style + // // of the current edit. Naturally, this is where we'll + // // want to extract the NotesType for a (NEW) sequence. + + // m_pSong->m_apNotes.push_back( m_pNotes ); + + // GAMESTATE->m_pCurNotes[PLAYER_1] = m_pNotes; + //} - m_pSong->m_apNotes.push_back( m_pNotes ); - GAMESTATE->m_pCurNotes[PLAYER_1] = m_pNotes; - } NoteData noteData; m_pNotes->GetNoteData( ¬eData ); diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index e3519f505a..19198415c3 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -444,7 +444,7 @@ static void HandleInputEvents(float fDeltaTime) ApplyGraphicOptions(); } */ - else if(DeviceI == DeviceInput(DEVICE_KEYBOARD, SDLK_F6)) + else if(DeviceI == DeviceInput(DEVICE_KEYBOARD, SDLK_F5)) // F6 conflicts with editor and AutoSync { if(type != IET_FIRST_PRESS) continue; diff --git a/stepmania/stepmania.nsi b/stepmania/stepmania.nsi index b9f13203e0..43d2f65fea 100644 --- a/stepmania/stepmania.nsi +++ b/stepmania/stepmania.nsi @@ -19,7 +19,7 @@ !define PRODUCT_NAME_VER "${PRODUCT_NAME} ${VERSION}" Name "${PRODUCT_NAME}" -OutFile "stepmania-CVS-20030130.exe" +OutFile "stepmania-CVS-20030202.exe" ;OutFile "stepmania301.exe" ; Some default compiler settings (uncomment and change at will): @@ -179,7 +179,7 @@ File "SDL_image.dll" ; File "SDL_net.dll" File "COPYING.txt" -File "README-FIRST.TXT" +File "README-FIRST.htm" File "NEWS" File "stepmania.exe" File "stepmania.vdi" @@ -208,7 +208,7 @@ CreateShortCut "$DESKTOP\Play ${PRODUCT_NAME_VER}.lnk" "$INSTDIR\stepmania.exe" CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\${PRODUCT_NAME_VER}.lnk" "$INSTDIR\stepmania.exe" CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\Open Songs Folder.lnk" "$WINDIR\explorer.exe" "$INSTDIR\Songs\" CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\Package Exporter.lnk" "$INSTDIR\smpackage.exe" -CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\README.lnk" "$INSTDIR\README-FIRST.txt" +CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\README-FIRST.lnk" "$INSTDIR\README-FIRST.htm" CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\Uninstall ${PRODUCT_NAME_VER}.lnk" "$INSTDIR\uninst.exe" CreateShortCut "$SMPROGRAMS\${PRODUCT_ID}\Go To StepMania web site.lnk" "http://www.stepmania.com"