From f08463defbdd468043c8274eee682f285e6c5fec Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Thu, 25 Sep 2014 02:27:25 -0700 Subject: [PATCH 01/16] Update metrics to prevent in-game warnings. --- Themes/_fallback/metrics.ini | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 6fefcbd0ea..8e18da632d 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -3656,6 +3656,31 @@ DisqualifiedP2Y= DisqualifiedP2OnCommand=visible,false DisqualifiedP2OffCommand= # +SmallBanner1X=SCREEN_CENTER_X +SmallBanner1Y=SCREEN_TOP-128 +SmallBanner1OnCommand=visible,false +SmallBanner1OffCommand= +SmallBanner2X=SCREEN_CENTER_X +SmallBanner2Y=SCREEN_TOP-128 +SmallBanner2OnCommand=visible,false +SmallBanner2OffCommand= +SmallBanner3X=SCREEN_CENTER_X +SmallBanner3Y=SCREEN_TOP-128 +SmallBanner3OnCommand=visible,false +SmallBanner3OffCommand= +SmallBanner4X=SCREEN_CENTER_X +SmallBanner4Y=SCREEN_TOP-128 +SmallBanner4OnCommand=visible,false +SmallBanner4OffCommand= +SmallBanner5X=SCREEN_CENTER_X +SmallBanner5Y=SCREEN_TOP-128 +SmallBanner5OnCommand=visible,false +SmallBanner5OffCommand= +SmallBanner6X=SCREEN_CENTER_X +SmallBanner6Y=SCREEN_TOP-128 +SmallBanner6OnCommand=visible,false +SmallBanner6OffCommand= +# DetailLineFormat="%3d/%3d" # From 60b66f72732b8e44d324d78cc3470d00305b7ea8 Mon Sep 17 00:00:00 2001 From: freem Date: Sat, 27 Sep 2014 17:16:44 -0500 Subject: [PATCH 02/16] add TFG to repo, update date on bottom of Lua.xml --- Docs/Luadoc/Lua.xml | 2 +- Program/Texture Font Generator.exe | Bin 0 -> 144896 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Program/Texture Font Generator.exe diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml index dae8fac50c..56e03b147b 100644 --- a/Docs/Luadoc/Lua.xml +++ b/Docs/Luadoc/Lua.xml @@ -2550,5 +2550,5 @@ StepMania v5.0 beta 3 - 2014-06-27 + 2014-09-15 diff --git a/Program/Texture Font Generator.exe b/Program/Texture Font Generator.exe new file mode 100644 index 0000000000000000000000000000000000000000..0e79fa826d78ffef37e902989ad0721afb108493 GIT binary patch literal 144896 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

O9MfaNckSF>k;!AVwsTVQRco~JD^)dIr){Y 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 literal 0 HcmV?d00001 From 3c3f0fb623773b5595cf11b89cc69197874a7cdf Mon Sep 17 00:00:00 2001 From: freem Date: Sat, 27 Sep 2014 21:23:05 -0500 Subject: [PATCH 03/16] quickly disable broken continue screen gonna tag beta 4 after this unless someone speaks up --- Themes/default/metrics.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 5aea4613b6..1ca22b3422 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -2076,7 +2076,7 @@ SmallBanner6OffCommand= [ScreenContinue] ShowHeader=false ShowFooter=false -ContinueEnabled=true +ContinueEnabled=false # TimerSeconds=20 TimerMetricsGroup="MenuTimerContinue" From 5f34e8a8485992668758c6860080a3ebb7e0ceff Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Sat, 27 Sep 2014 20:03:04 -0700 Subject: [PATCH 04/16] Disable HeartEntry by default --- Themes/default/metrics.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 1ca22b3422..88ea587576 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -1662,7 +1662,7 @@ ActiveAttackListP2OffCommand= [ScreenGameplayShared] [ScreenHeartEntry] -HeartEntryEnabled=true +HeartEntryEnabled=false ShowHeader=true ShowFooter=true From d92bf8a6df8e40046484a3422264019ad5c3b73a Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Sat, 27 Sep 2014 20:11:13 -0700 Subject: [PATCH 05/16] HeartEntry works, my bad. --- Themes/default/metrics.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 88ea587576..1ca22b3422 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -1662,7 +1662,7 @@ ActiveAttackListP2OffCommand= [ScreenGameplayShared] [ScreenHeartEntry] -HeartEntryEnabled=false +HeartEntryEnabled=true ShowHeader=true ShowFooter=true From af4d01af20caef2cfdc6e410391897d7987c73cb Mon Sep 17 00:00:00 2001 From: freem Date: Sun, 28 Sep 2014 00:45:42 -0500 Subject: [PATCH 06/16] update sm5_beginner.txt with the content from the google doc --- Docs/Userdocs/sm5_beginner.txt | 291 ++++++++++++++++++++++++++++----- 1 file changed, 250 insertions(+), 41 deletions(-) diff --git a/Docs/Userdocs/sm5_beginner.txt b/Docs/Userdocs/sm5_beginner.txt index 24c31d8535..bd60f3183a 100644 --- a/Docs/Userdocs/sm5_beginner.txt +++ b/Docs/Userdocs/sm5_beginner.txt @@ -1,5 +1,5 @@ StepMania 5 Beginner's Guide -Written and edited by the spinal shark collective +Written and edited by the StepMania team -------------------------------------------------------------------------------- Table of Contents 1 Introduction @@ -8,6 +8,7 @@ Table of Contents 2.1.1 Notable StepMania Versions 2.1.2 StepMania Components 2.2 StepMania Configuration + 2.2.0 Configuring Keys 2.2.1 Frequently Asked Questions that can be Solved by Changing the Configuration 2.3. Installing Content @@ -15,6 +16,8 @@ Table of Contents 2.3.2 Installing Noteskins/New Gametypes 2.3.3 Installing Themes 3. StepMania 5 + 3.1 Frequently Asked Questions about StepMania 5 +4. Reporting problems ================================================================================ Chapter 1: Introduction ================================================================================ @@ -28,11 +31,9 @@ skip ahead to Chapter 3: StepMania 5. Otherwise, read on. Chapter 2: StepMania ================================================================================ StepMania is an open-source rhythm game/engine, used by many projects, both -commercial and free. It is the software from which sm-ssc is derived, and as -a result, must be learned before using sm-ssc if you're not already familiar -with how it works. +commercial and free. -Some of the things an average sm-ssc user is expected to know includes the +Some of the things an average StepMania 5 user is expected to know include the meanings/"proper names" of certain things, as well as how to install content and configure the program to suit your playing style. @@ -51,10 +52,13 @@ Knowing the versions of StepMania is helpful, as it will help you deduce what you can and can not install. (Most songs are version-agnostic, though the background animations may not be. Themes, Noteskins, etc. are tied to specific versions.) +StepMania 5.0 is the only version actively supported by the StepMania developers. +All older versions have various problems and/or limitations that make them too +burdensome to continue supporting. * StepMania 3.9 -StepMania 3.9 is currently considered the stable version of StepMania. It dates -back to 2005, and is the version for which the bulk of content is produced. +StepMania 3.9 is the previous stable version of StepMania. It dates back to +2005, and is the version for which the bulk of content is produced. * StepMania 3.9 Plus/StepMania 3.9 Plus Redux 3.9 Plus/Redux is a fork of StepMania 3.9 that adds features from @@ -76,10 +80,31 @@ up until January 2008, when the last build that could be categorized as "CVS" was released. * StepMania 4.0 SVN/alpha -The current development version of StepMania. This is the version that sm-ssc -is forked off of. If you wish to port something to sm-ssc, it had better work -for this version first, unless you like working hard to port the theme past -various generations and default theme assumptions. +A development version of StepMania. This is the version that sm-ssc was forked +off of. This version is no longer supported and should not be used. + +* StepMania 4.0 Beta +Various betas were released for StepMania 4. They are no longer supported, had +various problems, and should not be used. + +* sm-ssc +sm-ssc was originally created to provide more theming functionality, as well as +keep the Lua-based StepMania alive (at that point in time, there were plans to +release a version of StepMania based on the old CVS codebase, circa ITG PC). +It eventually became StepMania 5. + +* StepMania 5.0 beta 3 +The previous beta release of StepMania 5. Includes many features from sm-ssc +and StepMania 4.0 as well as many new features. Any content that works in beta +3 will work in future releases in StepMania 5 (caveat: Many themes made for +beta 3 are full of mistakes, they will not work in beta 4) + +* StepMania 5.0 beta 4 +The current beta release of StepMania 5. This version has many additional +theming features and bug/crash fixes. +If you wish to port something to StepMania 5, or make a theme for StepMania 5, +it had better work for this version, because it will report your theme +mistakes to you on screen. -------------------------------------------------------------------------------- 2.1.2: StepMania Components @@ -111,9 +136,9 @@ you may see in StepMania communities and online. decide to quit. Like Nonstop courses, they have a normal lifebar as well. -------------------------------------------------------------------------------- * Event Mode - Typically used during events, this disables the concept of stages and lets you - play songs until you decide to stop. It is quite useful in Home Mode, and this - guide recommends you enable it. + Designed to be used during events, this disables the concept of "stages per + game" and lets you play songs until you decide to stop. It is quite useful in + Home Mode, and this guide recommends you enable it. * Gametypes Gametypes are the different game modes StepMania can play. They generally @@ -142,6 +167,8 @@ you may see in StepMania communities and online. * Themes Themes are skins for StepMania. They change the look and feel, and in post-3.9 versions, can also change elements of gameplay (scoring, grading) as well. + StepMania 5.0 adds many features to extend the limits of what a theme can + change. -------------------------------------------------------------------------------- 2.2: StepMania Configuration @@ -151,7 +178,14 @@ Learning how to properly configure StepMania can save you headaches. Most themes will have the Options menu in plain sight on the Title Menu. From there, it depends on which version of StepMania you have, as the options -menus were re-shuffled around for the StepMania 4 alphas. +menus were re-shuffled around for the StepMania 4 alphas and later versions. +This is also known as the Service Options menu. In all versions on +StepMania 5, this can be reached by pressing the Scroll Lock key at any time. +The key set as the "Operator" key in Config Key/Joy Mappings will also bring +up the Service Options menu. Some people also call this the "service button". +Note that in StepMania 5, the theme can control what options appear on this +screen. The information below applies only to the default theme and themes +that choose to present the same options. The typical StepMania 3.9 Options Menu: * Appearance Options @@ -180,9 +214,71 @@ The StepMania 4.0 alpha 4 Options Menu: * Profiles * Reload Songs/Courses -sm-ssc changes this up again, making the "Options" item on the Title Menu go +sm-ssc changed this up again, making the "Options" item on the Title Menu go to System Direction (mostly-used options), leaving the normal options menu to the Scroll Lock key. Blame Midiman. :) + +The StepMania 5.0 beta 4 Options Menu: +* Calibrate Audio Sync +* Select Game +* Config Key/Joy Mappings +* Test Input +* Input Options +* Reload Songs/Courses +* Arcade Options +* Appearance Options +* Set BG Fit Mode +* Graphics/Sound Options +* Profiles +* Network Options +* UI Options +* Advanced Options +* Stepmania Credits + +-------------------------------------------------------------------------------- +2.2.0: Configuring Keys +-------------------------------------------------------------------------------- +Controller mappings in StepMania are configured in the Config Key/Joy Mappings +screen. To reach it, hit the Operator key (Scroll Lock) and select Config Key/Joy +Mappings from the menu. + +The first thing you will see will be a warning telling you not to unmap important +keys, such as the arrow keys and the enter key. This is because those keys are +necessary for navigating the menus, and unmapping them will leave you unable to +navigate the menus. If you accidentally unmap one of the important keys, you can +reset your key configuration to the default by using the "Clear To Default" action. +The warning will be dismissable after 2.5 seconds and will dismiss itself after 5 +seconds. (time controlled by theme) After the warning disappears, you will see +the current keybindings, arranged into columns. + +Each player has their own three columns. "Primary" and "Secondary" are the two +columns you can configure. "Default" is the column you cannot configure. + +The key your cursor is currently on will be flashing between black and white. +(or whatever the theme set it to do) + +To set an individual key, move your cursor to the slot you want to set and hit +Enter. The next key you hit will be set in that slot. + +To set multiple keys in order, and save time going back and forth between the pad +and the keyboard, move your cursor to a slot and hit 'm'. This marks the slot, +adding it to a list. Hitting 'm' again will remove it from the list. When you have +marked all the slots you want to set, select the "Assign List" option. The screen +will then automatically move through the list of slots in the order they appear +on the screen, setting each one as you press the button for it. + +("Assign List" requires you to mark the keys you want because having preset lists +for you to pick from for every game type and the common combinations of what people +will want to set in one go would be more work than it's worth.) + +Any changes you make will only be saved when you choose "Save To Disk". +You can reload the settings from the disk with "Reload From Disk". + +If you try to leave the screen after changing a key without saving, you will be +prompted to save. Choosing "Yes" will save the settings to the disk and leave the +screen. Choosing "No" will reload the settings from the disk, undoing your change, +and leave the screen. Choosing "Cancel" will do neither, leaving you on the screen. + -------------------------------------------------------------------------------- 2.2.1: Frequently Asked Questions that can be Solved by Changing the Configuration -------------------------------------------------------------------------------- @@ -194,12 +290,14 @@ A: Where you go depends on the version of StepMania you use. [3.9] Machine Options [4.0 alphas] Advanced Options It will be the first option on each. +[5.0] UI Options, third option from the top. Q: How do I play forever, without game overs? A: Turn on Event Mode. Where you go depends on the version of StepMania you use. [3.9] Coin Options [4.0 alphas] Advanced Options, a bit down the page. +[5.0] Arcade Options, bottom of the page. Q: What the heck is this thing that says "Toasty" and how do I get rid of it? A: It's a reference to Mortal Kombat 2, where Dan Forden would pop out from @@ -212,6 +310,7 @@ As for turning it off, turn Easter Eggs off. It appears in different locations between StepMania versions: [3.9] Gameplay Options [4.0 alphas] Advanced Options, a bit down the page. +[5.0] Advanced Options, 8th option from the top. -------------------------------------------------------------------------------- 2.3: Installing Content @@ -222,36 +321,44 @@ completely, as you have other things to do. Before we touch on the specifics, there are a few skills you should learn. -* Mac Users of StepMania 4.0 -Most of the game content is packaged in a file called StepMania.smzip. This has -the pros of not cluttering things up, but the con is that people don't know -where to put things. +Previous versions of StepMania had instructions to install things in the main +StepMania folder. This caused problems with UAC on Windows and went against +convention on Linux and OS X. Because of those problems, installing content in +the main StepMania folder is no longer the correct thing to do. -Wherever you have StepMania installed, make the following folders: +The correct place to install content on StepMania 5 is the User Data folder. +The exact location is different for each platform. +Windows: %APPDATA%/StepMania 5.0/ +Linux: ~/.stepmania-5.0/ +OS X: ~/Library/Application Support/StepMania 5/ +Wherever you see the name "User Data folder", this is the folder it refers to. +OS X additionally has ~/Library/Preferences/StepMania 5/ for storing preferences. + +Inside the User Data folder you can install content by placing it in the following folders: * Songs * Themes - * Noteskins + * NoteSkins (and the various gametype folders, which are optional. You need at least one non-lights gametype in order to play.) - * Noteskins/dance - * Noteskins/pump - * Noteskins/para - * Noteskins/techno - * Noteskins/beat - * Noteskins/popn - * Noteskins/ez2 + * NoteSkins/dance + * NoteSkins/pump + * NoteSkins/para + * NoteSkins/techno + * NoteSkins/beat + * NoteSkins/popn + * NoteSkins/ez2 * Announcers - (but at this point, no SM4 announcers have been released) + (finding announcers made for SM5 is an exercise left for the reader) * Packages - (optional, but recommended) -and then you can follow the rest of this guide. +If one of the folders listed above does not exist, do not worry. You only need +to create a folder if you need to install a piece of content that belongs in it. * Not on Windows and want to deal with .smzip files? There are multiple ways to deal this. 1) Put the SMZip file in the Packages folder. 2) Rename the file to have an extension of .zip and extract in the root - StepMania folder. + User Data folder. 3) Pass the smzip's filename to StepMania on the command line/terminal. Dragging and dropping the .smzip may or may not work; we have not tested it. Also, this may or may not exist in your version of StepMania. @@ -266,7 +373,7 @@ For .smzip files, the section "Not on Windows and want to deal with .smzip files?" details all possible ways of installing .smzip files, but the most common ways are as follows: -1) For operating systems with a filetype handler (Windows), you can double +1) For operating systems with a filetype handler (Windows and OS X), you can double click on the .smzip file and the StepMania tools will handle it. 2) Putting the .smzip file in the Packages folder, where it will be automatically read by StepMania. @@ -304,7 +411,7 @@ of a pack that exhibits this behavior.) Overall, the setup should look something like this: -StepMania\ +User Data folder\ Songs\ Song Group 1\ Song Group 2\ @@ -323,7 +430,7 @@ NoteSkins change the appearance of the arrows. They are also linked with getting other gametypes supported in StepMania. The noteskin installation process looks something like this: -StepMania\ +User Data folder\ NoteSkins\ (gametype)\ (noteskin for gametype)\ @@ -346,7 +453,7 @@ kb7 (6 or 7 keys depending on when you try to use it) Depending on if the theme is packaged in a SMZip or not, you have a few options. If it is in a .smzip, you can put it in the Packages directory: -StepMania/ +User Data folder/ Packages/ MyTheme.smzip and StepMania will automatically read it. @@ -354,27 +461,129 @@ On Windows, you can double click on the .smzip file to install it in your user packages directory. THIS IS NOT RECOMMENDED BECAUSE IT CAUSES CONFUSION. Since .smzip files are really .zip files, you could also extract them in the -StepMania root folder. +User Data folder. If the themer has not packaged the theme in a .smzip, then you have to look inside the archive to see how the directory layout looks. 1) Themes folder - If it has a themes folder when you open it up, extract in the StepMania root + If it has a themes folder when you open it up, extract in the User Data folder, like you would a .smzip file. 2) Theme name as a folder This one will have to be extracted in the Themes directory. You will get a new folder with the files. 3) A bunch of folders + metrics.ini The themer was lazy; you're going to have to make a folder in the Themes - directory and extract the theme in there. + directory and extract the theme in there. Then go tell the themer that they're a bad person. When in doubt, read any documentation that comes with the theme for proper installation instructions. +Do not attempt to use any theme made for a StepMania version older than StepMania 5. +It will not work at all. Only use a theme made for StepMania 5 beta 1, or beta 2 +if you are a themer and you are working on that theme to make it work with +StepMania 5 beta 4. + ================================================================================ Chapter 3: StepMania 5 ================================================================================ The modern StepMania 5 originally began life as sm-ssc, a fork of StepMania 4 alpha 5 (later renamed to StepMania 5 after the reboot of SM4). sm-ssc was a fork focused on adding features for theming, but also tried to make the process of -dealing with StepMania a little easier. \ No newline at end of file +dealing with StepMania a little easier. + +-------------------------------------------------------------------------------- +3.1: Frequently Asked Questions about StepMania 5 +-------------------------------------------------------------------------------- + +Q: How do I keep my background videos/images from being stretched/distorted? +A: StepMania 5 has a preference for this, the "Set BG Fit Mode" option on the +Service Options screen. +Each column on that screen is a possible setting for the preference. +Each column shows how a background with each of the 3 most common aspect ratios +will look with that setting. The green rectangle in each example shows where the +edge of the screen will cut off the background, and area not covered by the +background will be black. Themes that change the contents of the Service Options +menu might not have Set BG Fit Mode in the Service Options menu, so it is +recommended to change to the default theme to set this option if you do not see +it in the Service Options menu for the theme you are using. + +Q: I'm a themer, how do I change the way ScreenSetBGFit looks? +A: First, make sure your metrics allow it to be accessed. If your theme sets the +LineNames metric in the ScreenOptionsService section, add "BGFit" to that metric. + +Second, open Themes/_fallback/BGAnimations/ScreenSetBGFit overlay.lua and read +everything in there. + +Third, create the screen in your theme using the knowledge gained from step two. + +Q: I run multiple versions of StepMania and I don't want to copy all my songs to the new install location. +A: Close stepmania. Look in your User Data folder for Save/Preferences.ini. +On OS X Save/ will actually be under ~/Library/Preferences/StepMania 5/. +Open that file in a text editor. Add the full path to your Songs folder to the +"AdditionalSongFolders" setting. If the folder your songs are in is anywhere +under Program Files or anywhere else that UAC interferes with, you will probably +have problems when editing simfiles. + +Q: I have thousands of scores in StepMania 3.9, how can I copy them to StepMania 5? +A: Create a new profile in StepMania 5. The profile's folder will be +"User Data folder/Save/LocalProfiles/000000/" (000000 is the first profile created, +if the new profile is the second profile, the folder name will be 000001, and so forth). +Place your Stats.xml from StepMania 3.9 into the folder for the new profile, +replacing any Stats.xml that is currently there. + +Q: I have some scores in one profile and some other scores in another profile, how do I merge them? +A: Hopefully, this feature will be added soon. + +Q: I want to make a theme, why do I have to learn Lua? Isn't making a theme just making graphics? +A: Themes are far more powerful in StepMania 5 than in previous versions. +Themes are more than just image files and can change every part of interacting +with StepMania. With this power comes the requirement of knowing how to use it. +If the thought of learning Lua and using it as a language frightens you, spend +more time reading the documentation and asking questions so you can learn to +understand how to use it. + +================================================================================ +Chapter 4: Reporting Problems +================================================================================ +http://www.stepmania.com/forums/ is the official StepMania forum. +Use this for asking questions and generally posting about StepMania. +Please search the forums for threads that cover your question before making a +new thread. + +https://github.com/stepmania/stepmania/issues is the bug tracker list. +Use this only for reporting problems or requesting features. +Please search the list before reporting a new issue. + +#stepmania-devs on irc.freenode.net is the IRC channel where the devs hang out. +Use this to chat with the devs and discuss StepMania related things. + +When reporting issues on the bug tracker: +1: Make the title of your issue short and informative. +"Crash report" is a bad title because it doesn't contain any context. +"Crash while juggling kittens" is a good title because it shows vaguely where the +problem is. + +2: Include explicit steps for reproducing your problem. +If you can't explain how you encountered the problem, we can't fix it. + +3: If you have new information to add to an existing issue, please comment on +that issue with the information you have. + +4: Developers have limited time, issues will not be fixed or responded to +immediately. Responses may take a week or two, so be patient and be prepared to +go through a couple requests for more information. + +5: It is important to include the name of the theme you are using with any issue +report. If the problem is not an outright crash and cannot be reproduced in the +default theme, it is likely a problem with the theme and should be reported to +the author of that theme. The main StepMania issue tracker is not the place to +report problems with any theme other than the default theme. + +Requesting features on the bug tracker: +If you are a themer requesting a new theme API feature, be prepared to describe +very explicitly what you want. Same as for reporting bugs, be prepared to wait. +Spending time in the developer IRC channel discussing issues can help a lot. + +If you are a skilled programmer, implementing the feature and submitting a pull +request is a good way to get it added to StepMania 5. See github's instructions +on forking a repository and submitting a pull request. From c548bff5645808db834312c6e22b70dfed600034 Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Tue, 30 Sep 2014 03:55:21 -0600 Subject: [PATCH 07/16] Changelog updated. --- Docs/Changelog_sm5.txt | 80 +++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index a878fe9750..4a6cced3c8 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -10,6 +10,15 @@ StepMania current development To reduce the number of entries in this file, entries are dated to the Saturday after they occurred. +2014/09/27 +---------- +* [Preferences] DebounceCoinInput time pref added for machines that need a + different debounce time for coin input. +* [Preferences] DefaultFailtype preference reinstated to resolve default fail + type problems. +* [TimingData] TimingData::GetReturnsNumbers metric added to make TimingData + functions return tables of numbers instead of strings. + 2014/09/20 ---------- * [ScreenOptionsCustomizeProfile] New screen added for setting profile stats. @@ -17,11 +26,13 @@ To reduce the number of entries in this file, entries are dated to the Saturday 2014/09/13 ---------- * [Endless] Songs are repicked on each repeat of the course. -* [GameState] GetCurrentStage logic fixed to correctly return Stage_Final in all cases where it should. +* [GameState] GetCurrentStage logic fixed to correctly return Stage_Final in + all cases where it should. * [JudgmentMessage] Tracks parameter replaced with Notes and Holds parameters. * [NumPadEntry] New customizable lua class for custom screens. * [ScreenHeartEntry] New screen added to default. -* [TapNote] Class exposed to lua through JudgmentMessage with all data on the TapNote. +* [TapNote] Class exposed to lua through JudgmentMessage with all data on the + TapNote. 2014/09/06 ---------- @@ -32,10 +43,13 @@ To reduce the number of entries in this file, entries are dated to the Saturday * [GameState] InsertCoin and InsertCredit lua functions added. * [PrefsManager] FastNoteRendering preference added. * [RageTexture] Reload lua function added. -* [RageTexture?] "__screen__" added as special screenshot texture name. Causes a skip. +* [RageTexture?] "__screen__" added as special screenshot texture name. + Causes a skip. * [Screen] SetNextScreenName lua function added. -* [ScreenCredits] New ScreenCredits. Please update your theme if you applied theme changes to this screen. -* [ScreenMapControllers] Massively changed to make it not suck. New elements, new metrics, new actions. +* [ScreenCredits] New ScreenCredits. Please update your theme if you applied + theme changes to this screen. +* [ScreenMapControllers] Massively changed to make it not suck. New elements, + new metrics, new actions. * [WheelItemBase] IsLoaded lua function added. 2014/08/30 @@ -47,9 +61,12 @@ To reduce the number of entries in this file, entries are dated to the Saturday ---------- * [ActorFrame] Internal diffuse and glow now apply to BitmapText children. * [GameState] SetCurrentPlayMode and SetCurrentStyle lua functions added. -* [PrefsManager] BackgroundFitMode preference added to settle all problems with how backgrounds are stretched or fit. -* [ScreenSetBGFit] New screen for presenting the BackgroundFitMode preference. See _fallback/BGAnimations/ScreenSetBGFitMode overlay.lua for documentation. -* [ThemeManager] HasMetric/String now return false when the group name or metric name is an empty string. +* [PrefsManager] BackgroundFitMode preference added to settle all problems + with how backgrounds are stretched or fit. +* [ScreenSetBGFit] New screen for presenting the BackgroundFitMode preference. + See _fallback/BGAnimations/ScreenSetBGFitMode overlay.lua for documentation. +* [ThemeManager] HasMetric/String now return false when the group name or + metric name is an empty string. 2014/08/09 ---------- @@ -68,25 +85,31 @@ To reduce the number of entries in this file, entries are dated to the Saturday 2014/07/26 ---------- * [ActorScroller] Accidental "permanent loop" bug fixed. -* [Common metrics] AfterThemeChangeScreen, AfterGameChangeScreen, and AfterGameAndThemeChangeScreen optional metrics added to Common section. +* [Common metrics] AfterThemeChangeScreen, AfterGameChangeScreen, and + AfterGameAndThemeChangeScreen optional metrics added to Common section. * [GameManager] SetGame lua function added. * [Globals] OldStyleStringToDifficulty lua function added. * [PrefsManager] SavePreferences lua function added. - ThreeKeyNavigation preference added. + ThreeKeyNavigation preference added. * [SoundManager] IsTimingDelayed lua function added. * [ThemeManager] SetTheme lua function added. * [ScreenHowToPlay] CharacterName metric works again. 2014/07/18 ---------- -* [BitmapText] LoadFont is now obsolete. Set the Font attribute of the BitmapText instead. -* [ErrorReporting] New system that reports theme errors through dialogs and an on screen display. (Sorry guys, your themes are all full of errors, and you should fix them) -* [LogDisplay] New actor class used by ErrorReporting, possibly useful more widely. See _fallback/Scripts/04 LogDisplay.lua for docs. +* [BitmapText] LoadFont is now obsolete. Set the Font attribute of the + BitmapText instead. +* [ErrorReporting] New system that reports theme errors through dialogs and + an on screen display. (Sorry guys, your themes are all full of errors, and + you should fix them) +* [LogDisplay] New actor class used by ErrorReporting, possibly useful more + widely. See _fallback/Scripts/04 LogDisplay.lua for docs. 2014/07/05 ---------- * [Actor] GetDestX/Y/Z lua functions added. -* [Profile] Lua functions for calculating calories based on heart rate added. See ThemerDocs/calories.txt +* [Profile] Lua functions for calculating calories based on heart rate added. + See ThemerDocs/calories.txt 2014/06/28 ---------- @@ -102,27 +125,35 @@ To reduce the number of entries in this file, entries are dated to the Saturday 2014/06/07 ---------- -* [ScreenSelectMusic] SelectMenuInput message is now always sent when Select is pressed. +* [ScreenSelectMusic] SelectMenuInput message is now always sent when Select + is pressed. 2014/05/17 ---------- -* [GameState] StoreRankingName lua function added. Ranking names now allow lowercase. -* [Profile] SetLastUsedHighScoreName and GetHighScoreListIfExists lua functions added. +* [GameState] StoreRankingName lua function added. Ranking names now allow + lowercase. +* [Profile] SetLastUsedHighScoreName and GetHighScoreListIfExists lua + functions added. 2014/05/10 ---------- -* [Player] Tracks param added to JudgmentMessageCommand. (will change before beta 4) +* [Player] Tracks param added to JudgmentMessageCommand. (will change before + beta 4) * [ScreenGameplay] Themable haste system added. - GetTrueBPS lua function added. -* [ThemeManager] GetMetricNamesInGroup and GetStringNamesInGroup lua functions added. + GetTrueBPS lua function added. +* [ThemeManager] GetMetricNamesInGroup and GetStringNamesInGroup lua functions + added. 2014/05/03 ---------- * [ActorFrame] GetChild and GetChildren modified, see Lua.xml. * [NoteSkinManager] GetMetric function added. -* [PlayerOptions] Entirely new API for setting player options. Superior alternative to ApplyGameCommand. -* [SongOptions] Entirely new API for setting song options. Same design as new PlayerOptions API. -* [NoteField] NoteField Board can now use any AutoActor class instead of just Sprite/Sprite-derived ones. +* [PlayerOptions] Entirely new API for setting player options. Superior + alternative to ApplyGameCommand. +* [SongOptions] Entirely new API for setting song options. Same design as new + PlayerOptions API. +* [NoteField] NoteField Board can now use any AutoActor class instead of just + Sprite/Sprite-derived ones. 2014/04/26 ---------- @@ -151,7 +182,8 @@ To reduce the number of entries in this file, entries are dated to the Saturday ---------- * [ActorScroller] DrawByZPosition fixed for looping ActorScrollers. * [Globals?] GetTimeSinceStart global lua function added. -* [Player] FirstTrack parameter added to JudgmentMessageCommand. (will change before beta 4) +* [Player] FirstTrack parameter added to JudgmentMessageCommand. (will change + before beta 4) ================================================================================ StepMania 5.0 beta 3 | 20140224 From f3faeefb269b681230c4e98fac6c4e45db06d286 Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 17:30:59 -0500 Subject: [PATCH 08/16] StepMania 5 beta 4, for real this time. --- Docs/Changelog_sm5.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 4a6cced3c8..be0fddad4d 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -5,7 +5,7 @@ from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt. ________________________________________________________________________________ ================================================================================ -StepMania current development +StepMania 5.0 beta 4 | 20140930 -------------------------------------------------------------------------------- To reduce the number of entries in this file, entries are dated to the Saturday after they occurred. From e9d26a4b7bbd3b1e21918236a6a99bd1c5e5058e Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 17:35:42 -0500 Subject: [PATCH 09/16] add missing 2d character metrics I'm surprised people still use them, really --- Themes/_fallback/metrics.ini | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 8e18da632d..3ab571690e 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -4715,3 +4715,10 @@ NullCountString="" [TimingData] GetReturnsNumbers=false + +# Apparently these are still used. Let it be known that they're severely deprecated. +[DancingCharacters] +2DCharacterXP1=SCREEN_WIDTH*0.25 +2DCharacterYP1=SCREEN_HEIGHT*0.5 +2DCharacterXP2=SCREEN_WIDTH*0.75 +2DCharacterYP2=SCREEN_HEIGHT*0.5 From 8ca8ad41910ed81db227885fce949f305942ec53 Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 17:35:42 -0500 Subject: [PATCH 10/16] add missing 2d character metrics I'm surprised people still use them, really --- Themes/_fallback/metrics.ini | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 8e18da632d..3ab571690e 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -4715,3 +4715,10 @@ NullCountString="" [TimingData] GetReturnsNumbers=false + +# Apparently these are still used. Let it be known that they're severely deprecated. +[DancingCharacters] +2DCharacterXP1=SCREEN_WIDTH*0.25 +2DCharacterYP1=SCREEN_HEIGHT*0.5 +2DCharacterXP2=SCREEN_WIDTH*0.75 +2DCharacterYP2=SCREEN_HEIGHT*0.5 From db1147abac524a22907ad9feeae6a998765edbb7 Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Tue, 30 Sep 2014 19:16:21 -0600 Subject: [PATCH 11/16] Added ScreenHeartEntry example. --- .../Example_Screens/ScreenHeartEntry.lua | 183 ++++++++++++++++++ Docs/Themerdocs/calories.txt | 18 +- Themes/_fallback/Scripts/04 NumPadEntry.lua | 2 + 3 files changed, 188 insertions(+), 15 deletions(-) create mode 100644 Docs/Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua diff --git a/Docs/Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua b/Docs/Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua new file mode 100644 index 0000000000..b6b4e87bf3 --- /dev/null +++ b/Docs/Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua @@ -0,0 +1,183 @@ +-- This example describes everything you need to do in your theme to allow the +-- player to enter their heart rate for calorie calculation. + +-- First, the metrics you'll need to add to metrics.ini. +-- [ScreenHeartEntry] +-- # The HeartEntryEnabled metric must be set to true so the branching logic +-- # will know that your theme supports the screen. +-- HeartEntryEnabled=true +-- # ScreenHeartEntry uses ScreenWithMenuElements as its fallback, so the +-- # metrics in the ScreenWithMenuElements section will also apply to it. + +-- Now for the body of the screen. The things discussed here will have to go +-- in BGAnimations/ScreenHeartEntry overlay.lua + +-- The positions the numpads for entering the heart rate will be placed at. +local heart_xs= { + [PLAYER_1]= SCREEN_CENTER_X * 0.625, + [PLAYER_2]= SCREEN_CENTER_X * 1.375, +} + +-- heart_entries is a table that will be used to store the numpads that the +-- players will use. +local heart_entries= {} +-- Note that a numpad is only created for a player if that player is enabled +-- and they have the flag set in their profile to enable heart rate entry. +for i, pn in ipairs(GAMESTATE:GetEnabledPlayers()) do + local profile= PROFILEMAN:GetProfile(pn) + if profile and profile:GetIgnoreStepCountCalories() then + -- This is probably the part you'll want to configure the most, the + -- numpads. _fallback/Scripts/04 NumPadEntry.lua discusses configuring a + -- numpad in detail. + heart_entries[pn]= new_numpad_entry{ + Name= pn .. "_heart_entry", + InitCommand= cmd(xy, heart_xs[pn], SCREEN_CENTER_Y+48), + -- Settings for value are optional, but you will probably want to + -- change them, so they are provided in this example. + -- If a simple colored BitmapText isn't what you want for displaying + -- the value being entered, read _fallback/Scripts/04 NumPadEntry.lua. + value_pos= {0, -48}, + value_font= "Common Normal", + value_color= PlayerColor(pn), + -- Optional prompt settings. + prompt_pos= {0, -72}, + prompt_font= "Common Normal", + prompt_color= Color.White, + prompt_text= THEME:GetString("ScreenHeartEntry", "Heart Rate"), + -- Optional button settings. + button_positions= { + {-30, -24}, {0, -24}, {30, -24}, + {-30, 0}, {0, 0}, {30, 0}, + {-30, 24}, {0, 24}, {30, 24}, + {-30, 48}, {0, 48}, {30, 48} + }, + button_font= "Common Normal", + button_color= Color.White, + -- Cursor settings. You probably want something more than a quad for + -- the cursor, so this example includes the command the cursor needs + -- to support to do its job. + cursor= Def.Quad{ + InitCommand= function(self) + self:SetWidth(16) + self:SetHeight(28) + self:diffuse(PlayerDarkColor(pn)) + end, + -- MoveCommand is used to move the cursor to a button. + MoveCommand= function(self, param) + -- param contains the position to move to. + self:stoptweening() + self:decelerate(0.15) + self:xy(param[1], param[2]) + end, + -- FitCommand is used to change the size of the cursor to fit the + -- button after it has been moved. + FitCommand= function(self, param) + -- param is the actor for the button. + -- Note that this does not use stoptweening or finishtweening. + -- This is because it is executed with playcommand immediately + -- after MoveCommand, and thus the state changes it makes combine + -- with the actor state at the end of MoveCommand. + self:SetWidth(param:GetWidth()) + end + }, + -- cursor_draw controls whether the cursor is above or below the + -- buttons. + cursor_draw= "first", -- stick it under the buttons. + -- Don't let the player enter a silly value. + max_value= 300, + -- Automatically move the cursor to the done button when the player has + -- entered three digits. + auto_done_value= 100, + } + end +end + +-- This function is the input callback. It handles button presses from the +-- player, passing them to the numpad so the player can enter their heart +-- rate, and detecting when the player is done. +-- See the AddInputCallback function for the Screen class in Lua.xml for a +-- full description of the event argument. +local function input(event) + local pn= event.PlayerNumber + -- If the PlayerNumber isn't set, the button isn't mapped. Ignore it. + if not pn then return end + -- If it's a release, ignore it. + if event.type == "InputEventType_Release" then return end + -- If the player doesn't have a heart_entry, ignore it. + if not heart_entries[pn] then return end + -- Pass the input to the heart_entry for the player. It will handle moving + -- the cursor. If it returns true, the player is done. + local done= heart_entries[pn]:handle_input(event.GameButton) + if done then + -- Play a sound for the player so they know the value was entered. + SOUND:PlayOnce(THEME:GetPathS("Common", "Start")) + -- Check whether all players that need to enter their heart rate are done. + local all_done= true + for pn, entry in pairs(heart_entries) do + if not entry.done then all_done= false break end + end + if all_done then + -- If the players are done, add the calories to their profiles. + for pn, entry in pairs(heart_entries) do + local profile= PROFILEMAN:GetProfile(pn) + if profile and profile:GetIgnoreStepCountCalories() then + -- calories is the value you might want to store off in a global + -- variable to display on evaluation. + local calories= profile:CalculateCaloriesFromHeartRate( + entry.value, GAMESTATE:GetLastGameplayDuration()) + profile:AddCaloriesToDailyTotal(calories) + end + end + -- Since all players are done, transition to the next screen. + SCREENMAN:GetTopScreen():StartTransitioningScreen("SM_GoToNextScreen") + end + end +end + +-- A simple timer that the player can watch while counting their pulse. +-- The menu timer isn't used because it has undesired side effects. +-- timer_text will be set to the BitmapText used to display the time. This +-- way, the BitmapText doesn't have to be fetched with GetChild every frame. +local timer_text +-- This is an update function for an ActorFrame. It will run every frame. +local function timer_update(self) + local time= math.floor((self:GetSecsIntoEffect() % 60) * 10) / 10 + if time < 10 then + timer_text:settext(("0%.1f"):format(time)) + else + timer_text:settext(("%.1f"):format(time)) + end +end + +-- args contains the actors that will be in the ActorFrame for this screen. +local args= { + Def.ActorFrame{ + Name= "timer", + InitCommand= function(self) + -- Set the effectperiod so the timer can show an elapsed time. + self:effectperiod(2^16) + -- Set timer_text so GetChild doesn't need to be called every frame. + timer_text= self:GetChild("timer_text") + -- Set the update function so the timer will be updated. + self:SetUpdateFunction(timer_update) + end, + OnCommand= function(self) + -- Add the input callback so input will be handled. + SCREENMAN:GetTopScreen():AddInputCallback(input) + end, + -- The BitmapText used to display the elapsed time. + Def.BitmapText{ + Name= "timer_text", Font= "Common Normal", Text= "00.0", + InitCommand= cmd(xy, SCREEN_CENTER_X, SCREEN_CENTER_Y-80; diffuse, Color.White), + OnCommand= cmd(strokecolor,Color.Outline), + } + }, +} + +-- The actors for the heart_entries are added in a loop so that only the ones +-- that will be used will exist. +for pn, entry in pairs(heart_entries) do + args[#args+1]= entry:create_actors() +end + +return Def.ActorFrame(args) diff --git a/Docs/Themerdocs/calories.txt b/Docs/Themerdocs/calories.txt index bea235fdfb..de90d75f6d 100644 --- a/Docs/Themerdocs/calories.txt +++ b/Docs/Themerdocs/calories.txt @@ -6,6 +6,7 @@ The first system simply uses the weight of the player and adds a small amount fo The second system uses age, gender, weight, heart rate, and song duration to calculate the amount used during a song. This requires a theme to support it, and the relevant parts of Editable.ini to be set for the profile. Editable.ini fields: +The default theme provides a profile editing screen for setting these fields in Stepmania without needing to edit Editable.ini by hand. BirthYear, -- defaults to 1995 IgnoreStepCountCalories, -- Must be set to 1 to use the second system. IsMale, -- Defaults to 1. Set to 0 for females. @@ -29,22 +30,9 @@ CalculateCaloriesFromHeartRate() Intended usage: A theme that supports heart rate calorie calculation should take the following steps: -1. Create a new screen that the player will be able to use to enter their heart rate. It shall be called "ScreenHeartEntry" in this list, though a theme can name it anything. -2. During ScreenGameplay, track the amount of time that the player is hitting steps for. This duration must be in seconds. -3. When proceeding from ScreenGameplay: -3a. Check whether GetIgnoreStepCountCalories returns true for either player's profile. -3b. If it returns true for either player, go to ScreenHeartEntry instead of ScreenEvaluationNormal. -3c. This means changing the NextScreen metric for ScreenGameplay to use a function that checks the profiles and returns the correct screen. -4. On ScreenHeartEntry: -4a. Provide a timer that the players can watch while measuring their pulse. -4b. Provide a way for the players to enter their heart rate in beats per minute. -4c. When a player enters their heart rate, use Profile:CalculateCaloriesFromHeartRate(). -4d. Do not add calories to a profile if Profile:IgnoreStepCountCalories() returns false for that profile. -4e. Pass the heart rate and the duration from ScreenGameplay to Profile:CalculateCaloriesFromHeartRate() and store its return value. -4f. Pass the return value of Profile:CalculateCaloriesFromHeartRate() to Profile:AddCaloriesToDailyTotal() to add them to the total for that player's profile. -4g. When all active players have finished entering their heart rate, proceed to ScreenEvaluationNormal. -5. This concludes the special steps required for theme support of heart rate calorie calculation. +1. Create ScreenHeartEntry as described in Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua. _fallback's branching logic will take care of checking whether the screen should be used. Side notes: CalculateCaloriesFromHeartRate and AddCaloriesToDailyTotal are separate functions so that a theme can display or use the calorie amount in other ways easily. If IgnoreStepCountCalories is true for a profile, but the theme in use does not provide support using the steps listed above, that profile will not accumulate calories. +Note that calories will not accumulate during gameplay for a profile that has IgnoreStepCountCalories set to true. PlayerStageStats:GetCaloriesBurned() will also return 0 for that player. You'll have to store the value returned by CalculateCaloriesFromHeartRate in a global variable if you want to display it later on ScreenEvaluation. diff --git a/Themes/_fallback/Scripts/04 NumPadEntry.lua b/Themes/_fallback/Scripts/04 NumPadEntry.lua index 1f52c416d7..63a792b083 100644 --- a/Themes/_fallback/Scripts/04 NumPadEntry.lua +++ b/Themes/_fallback/Scripts/04 NumPadEntry.lua @@ -183,6 +183,8 @@ -- -- is a table of x, y, and optional z. Unused if you pass in a custom -- -- value actor. -- value_pos= {0, -48}, +-- -- Optional. The font to use for the default value actor. +-- value_font= "Common Normal", -- -- Optional. The color for the default value text. Unused if you pass -- -- in a custom value actor. Default is White. -- value_color= Color.White, From 32c40753fe47a76ba25381e42dc2bfa285b8a07e Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 23:36:13 -0500 Subject: [PATCH 12/16] Fix error that comes from using LoadFont --- .../BGAnimations/ScreenSystemLayer overlay/default.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua b/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua index 0e638d6afe..e1c916da2b 100644 --- a/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua +++ b/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua @@ -36,7 +36,8 @@ end; OnCommand=cmd(diffuse,PlayerColor(PlayerNumber);fadebottom,1); }; }; - t[#t+1] = LoadFont("Common","Normal") .. { + t[#t+1] = Def.BitmapText{ + Font="Common Normal"; Name = "PlayerText"; InitCommand=cmd(x,-60;maxwidth,80/0.5;zoom,0.5;queuecommand,"On"); OnCommand=cmd(playcommand,"Set"); @@ -70,7 +71,8 @@ t[#t+1] = Def.ActorFrame { OnCommand=cmd(finishtweening;diffusealpha,0.85;); OffCommand=cmd(sleep,3;linear,0.5;diffusealpha,0;); }; - LoadFont("Common","Normal") .. { + Def.BitmapText{ + Font="Common Normal"; Name="Text"; InitCommand=cmd(maxwidth,750;horizalign,left;vertalign,top;y,SCREEN_TOP+10;x,SCREEN_LEFT+10;shadowlength,1;diffusealpha,0;); OnCommand=cmd(finishtweening;diffusealpha,1;zoom,0.5); From 7dac269bcb5d35de2d864b9ea784b628e4c2ffad Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 23:39:21 -0500 Subject: [PATCH 13/16] This file also uses LoadFont("Common","Normal"), which will cause StepMania to cry --- Themes/default/Graphics/StepsDisplay autogen/default.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Themes/default/Graphics/StepsDisplay autogen/default.lua b/Themes/default/Graphics/StepsDisplay autogen/default.lua index 59ebf66c45..f876d08158 100644 --- a/Themes/default/Graphics/StepsDisplay autogen/default.lua +++ b/Themes/default/Graphics/StepsDisplay autogen/default.lua @@ -8,7 +8,8 @@ t[#t+1] = Def.Quad { InitCommand=cmd(zoomto,40,20;diffuse,Color.Black; diffusealpha,0.5;fadeleft,0.25;faderight,0.25); }; -t[#t+1] = LoadFont("Common","Normal") .. { +t[#t+1] = Def.BitmapText { + Font="Common Normal"; Text="AG"; InitCommand=cmd(shadowlength,1;zoom,0.875); }; From 7c795fdbb725b7bd7b52ad4059fb9e06f863bd5a Mon Sep 17 00:00:00 2001 From: freem Date: Tue, 30 Sep 2014 23:47:05 -0500 Subject: [PATCH 14/16] our issue tracker moved to github a long time ago, even if we don't currently use this item. --- Themes/_fallback/metrics.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 3ab571690e..80822b09eb 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1847,7 +1847,7 @@ ChoiceContinue="screen,ScreenContinue;text,Continue?" ChoiceOnline="screen,ScreenNetworkOptions;text,Play Online" ChoiceGameSelect="screen,ScreenSelectGame;text,Select Game" ChoiceJukebox="screen,ScreenJukeboxMenu;text,Jukebox" -ChoiceReportBug="urlnoexit,http://ssc.ajworld.net/sm-ssc/bugtracker/;text,Report Bug" +ChoiceReportBug="urlnoexit,https://github.com/stepmania/stepmania/issues;text,Report Bug" ChoiceIRC="urlnoexit,http://chat.mibbit.com/?server=chat.freenode.net&channel=%23stepmania-devs&nick=StepMania_player;text,Chat on IRC" ChoiceSandbox="screen,ScreenTest;text,Sandbox" # From 63fa9afc246b30077f22058e3c0720664d38d09d Mon Sep 17 00:00:00 2001 From: freem Date: Thu, 2 Oct 2014 02:05:36 -0500 Subject: [PATCH 15/16] add sm5_beginner.txt to NSIS install script --- stepmania.nsi | 1 + 1 file changed, 1 insertion(+) diff --git a/stepmania.nsi b/stepmania.nsi index f3bf3acb33..293f612668 100644 --- a/stepmania.nsi +++ b/stepmania.nsi @@ -474,6 +474,7 @@ Section "Main Section" SecMain File "Docs\Changelog_SSCformat.txt" File "Docs\CommandLineArgs.txt" File "Docs\CourseFormat.txt" + File "Docs\Userdocs\sm5_beginner.txt" File /r /x CVS /x .svn "Docs\license-ext" File /r /x CVS /x .svn "Docs\Luadoc" File /r /x CVS /x .svn "Docs\Themerdocs" From 4629bdef5c70e8f257fb3af20fc10bdb16985aff Mon Sep 17 00:00:00 2001 From: freem Date: Mon, 6 Oct 2014 17:50:47 -0500 Subject: [PATCH 16/16] Make the log mention Windows 8 instead of "unknown NT-based" (fwiw, I don't like windows 8. also can someone tell me what version number windows 10 will be using?) --- src/archutils/Win32/DebugInfoHunt.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/archutils/Win32/DebugInfoHunt.cpp b/src/archutils/Win32/DebugInfoHunt.cpp index b05a1f098e..afb0e62b20 100644 --- a/src/archutils/Win32/DebugInfoHunt.cpp +++ b/src/archutils/Win32/DebugInfoHunt.cpp @@ -240,6 +240,7 @@ static void GetWindowsVersionDebugInfo() */ } else if(ovi.dwMajorVersion == 6 && ovi.dwMinorVersion == 1) + { Ver += "Win7"; // todo: make this check work /* @@ -248,6 +249,18 @@ static void GetWindowsVersionDebugInfo() else Ver += "WinServer2008 R2"; */ + } + else if(ovi.dwMajorVersion == 6 && ovi.dwMinorVersion == 2) + { + Ver += "Win8"; + // todo: make this check work + /* + if(ovi.wProductType == VER_NT_WORKSTATION) + Ver += "Win7"; + else + Ver += "WinServer2008 R2"; + */ + } else Ver += "unknown NT-based"; } else Ver += "???";