Merge branch 'master' of https://github.com/stepmania/stepmania into MacOSX10.9.sdk

This commit is contained in:
Thai Pangsakulyanont
2014-10-11 12:40:18 +07:00
329 changed files with 9541 additions and 4590 deletions
+3
View File
@@ -9,6 +9,9 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.txt]
indent_style = space
[*.md]
trim_trailing_whitespace = false
+4 -1
View File
@@ -57,14 +57,17 @@ src/stamp-h1
Docs/doxygen
PBProject/build
Xcode/build
Xcode/*.xcodeproj/xcuserdata/
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcworkspace
src/build-*
src/Release-*
src/libtomcrypt/build-*
src/libtomcrypt/Release-*
src/libtomcrypt/Debug
src/libtommath/build-*
src/libtommath/Release-*
src/libtommath/Debug
src/*.old
*/.deps
*/.dirstamp
@@ -127,4 +130,4 @@ bundle/ffmpeg/*/*.ver
bundle/ffmpeg/*/*.def
bundle/ffmpeg/*/*.orig.def
bundle/ffmpeg/*/*.dll.a
bundle/ffmpeg/*/*.lib
bundle/ffmpeg/*/*.lib
+33
View File
@@ -0,0 +1,33 @@
language: c
compiler:
- clang
- gcc
notifications:
email: false
irc: "chat.freenode.net#stepmania-devs"
before_script:
- sudo apt-get install nasm
- sudo apt-get install libmad0-dev
- sudo apt-get install libgtk2.0-dev
- sudo apt-get install binutils-dev
- sudo apt-get install libasound-dev
- sudo apt-get install libpulse-dev
- sudo apt-get install libjack-dev
- sudo apt-get install libc6-dev
- sudo apt-get install libogg-dev
- sudo apt-get install libvorbis-dev
- sudo apt-get install libbz2-dev
- sudo apt-get install zlib1g-dev
- sudo apt-get install libjpeg8-dev
- sudo apt-get install libpng12-dev
- sudo apt-get install libxtst-dev libxrandr-dev
- sudo apt-get install libglu1-mesa-dev
- sudo apt-get install mesa-common-dev
- sudo apt-get install libglew-dev
script:
- ./autogen.sh
- ./configure && make
+8 -5
View File
@@ -1,9 +1,12 @@
local Color1 = color(Var "Color1");
local Color2 = color(Var "Color2");
-- Alternating files being played back at once
local t = Def.ActorFrame {
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
};
return t
return t
+3 -4
View File
@@ -1,6 +1,5 @@
local Color1 = color(Var "Color1");
local Color2 = color(Var "Color2");
local stretchBG = PREFSMAN:GetPreference("StretchBackgrounds")
local t = Def.ActorFrame {};
@@ -12,9 +11,9 @@ t[#t+1] = LoadActor(Var "File1") .. {
if Var("File2") ~= nil then
t[#t+1] = LoadActor(Var("File2")) .. {
OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;scale_or_crop_background;diffuse,Color1;effectclock,"music");
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;scale_or_crop_background;diffuse,Color1;effectclock,"music");
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
end;
+1 -4
View File
@@ -1,15 +1,12 @@
local Color1 = color(Var "Color1");
local Color2 = color(Var "Color2");
local stretchBG = PREFSMAN:GetPreference("StretchBackgrounds")
local t = Def.ActorFrame {
Def.Sprite {
OnCommand=function(self)
self:LoadFromCurrentSongBackground()
self:xy(SCREEN_CENTER_X,SCREEN_CENTER_Y)
if stretchBG then self:SetSize(SCREEN_WIDTH,SCREEN_HEIGHT)
else self:scale_or_crop_background();
end
self:scale_or_crop_background();
self:diffuse(Color1)
self:effectclock("music")
end;
+1 -4
View File
@@ -1,13 +1,10 @@
local Color1 = color(Var "Color1");
local stretchBG = PREFSMAN:GetPreference("StretchBackgrounds")
local t = Def.ActorFrame {
LoadActor(Var "File1") .. {
OnCommand=function(self)
self:xy(SCREEN_CENTER_X,SCREEN_CENTER_Y)
if stretchBG then self:SetSize(SCREEN_WIDTH,SCREEN_HEIGHT)
else self:scale_or_crop_background();
end
self:scale_or_crop_background();
self:diffuse(Color1)
self:effectclock("music")
end;
+1 -1
View File
@@ -1,4 +1,4 @@
local Color = color(Var "Color1");
local Color1 = color(Var "Color1");
local t = Def.ActorFrame {
LoadActor(Var "File1") .. {
+7 -7
View File
@@ -874,7 +874,7 @@ sm-ssc v1.0 Release Candidate 1 | 20100627
* [Screen] add GetScreenType() Lua binding.
* howl's patch for fixing LowLevelWindow
(stepmania4-fullscreen-focus-lost-and-restore-resolution2.patch)
http://www.stepmania.com/forums/showthread.php?t=23693
http://old.stepmania.com/forums/showthread.php?t=23693
20100608
--------
@@ -1564,7 +1564,7 @@ Theme-related additions/bugfixes aren't listed here, usually.
--------
* (smpackage) sm4svn r28243: "fix for FlushDirCache" [Chris Danford]
* Fix Beginner Helper rest location [sy567]
(see http://www.stepmania.com/forums/showpost.php?p=158721&postcount=12)
(see http://old.stepmania.com/forums/showpost.php?p=158721&postcount=12)
20091211
--------
@@ -1596,7 +1596,7 @@ the gametype causes the DifficultyList/StepsDisplayList to not show anything.
20091206
--------
Implement a patch to support modern versions of ffmpeg.
(See http://www.stepmania.com/forums/showthread.php?t=21434 for more info.)
(See http://old.stepmania.com/forums/showthread.php?t=21434 for more info.)
Petr Baudis (3):
video.m4: Add libswscale checks.
@@ -1681,7 +1681,7 @@ changes are from baseline StepMania 4 SVN, in order to keep compatibility.
--------
* [ArchHooks_Unix] Follow user's system language as default.
[David Santamaría Rogado (howl)]
See http://www.stepmania.com/forums/showthread.php?t=21471 for more info.
See http://old.stepmania.com/forums/showthread.php?t=21471 for more info.
20091120
--------
@@ -1707,7 +1707,7 @@ changes are from baseline StepMania 4 SVN, in order to keep compatibility.
--------
* Prevent focus lost at Fullscreen on X11, fix windowed->fullscreen resolution
changes so that they save [David Santamaría Rogado (howl)]
(http://www.stepmania.com/forums/showthread.php?t=21430)
(http://old.stepmania.com/forums/showthread.php?t=21430)
20091114
--------
@@ -1754,10 +1754,10 @@ changes are from baseline StepMania 4 SVN, in order to keep compatibility.
* r28221: "allow overriding, like PRODUCT_ID" [Glenn Maynard]
* r28222-28223: "adding support for pms files" [GRIM657]
* The pulseaudio patch [David Santamaría Rogado (howl), Ondřej Hošek, Damien Thébault]
(see http://www.stepmania.com/forums/showthread.php?t=21348)
(see http://old.stepmania.com/forums/showthread.php?t=21348)
* Greg Nadja's OpenGL/Windows patch
* Load Splash.png instead of an .xpm [David Santamaría Rogado (howl)]
(http://www.stepmania.com/forums/showpost.php?p=157340&postcount=3)
(http://old.stepmania.com/forums/showpost.php?p=157340&postcount=3)
* sm-ssc Changes:
* [ScreenSelectMusic.cpp] Add SelectMenuInputMessage, has params Player and
+206 -7
View File
@@ -1,13 +1,212 @@
StepMania 5 Changelog
StepMania 5 Changelog
________________________________________________________________________________
The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes
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.
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.
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.
* [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.
2014/09/06
----------
* Changed ES/OMES speed mod to 2x from 1.5x.
* [ActorMultiVertex] GetTexture lua function added.
* [BitmapText] max_dimension_use_zoom lua function added.
* [Edit Mode] Swap Up/Down and Arbitrary Remap added to Alter menu.
* [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.
* [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.
* [WheelItemBase] IsLoaded lua function added.
2014/08/30
----------
* [ActorScroller] wrap parameter added for controlling looping behavior better.
* Life difficulty matches StepMania 3.9's again.
2014/08/16
----------
* [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.
2014/08/09
----------
* [GameManager] GetStylesForGame lua function added.
* [LifeMeterBattery] CourseSongRewardLives metric added.
* [LifeMeter] LifeType, DrainType, and BatteryLives moved to PlayerOptions so
the players can have different settings.
* [ScreenGameplay] LifeMeterChangedP1 message is no longer broadcast for for
P2's lifemeter. Use LifeMeterChangedP2. "Life" and "StepsSecond" are passed
in the params table for the message.
2014/08/02
----------
* [MusicWheel] Added GetSelectedSection lua function.
2014/07/26
----------
* [ActorScroller] Accidental "permanent loop" bug fixed.
* [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.
* [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.
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
2014/06/28
----------
* [ArrowEffects] New namespace of lua functions.
* [Screen] AddInputCallback and RemoveInputCallback lua functions added.
2014/06/21
----------
* [Gameplay] CMods and MMods now automatically compensate for music rate.
* [Globals] SaveScreenshot lua function added.
* [ScreenPlayerOptions] ArbitrarySpeedMods system added.
* [ScreenSelectMusic] Pad codes that set modifiers disabled.
2014/06/07
----------
* [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.
2014/05/10
----------
* [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.
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.
2014/04/26
----------
* [Style] GetColumnInfo and GetColumnDrawOrder lua functions added.
2014/04/19
----------
* [ActorMultiVertex] New actor class added.
* [ScreenGameplay] GetHasteRate lua function added. GiveUpSeconds metric added.
* [SoundManager] StopMusic lua function added.
2014/04/05
----------
* [GameState] HaveProfileToLoad/Save and Load/SaveProfiles lua functions added.
* [ScreenWithMenuElements] StartTransitioningScreen lua function added.
2014/03/22
----------
* [Player] HoldNoteScore_MissedHold added.
2014/03/05
----------
* [ScreenNetSelectBase] Fix colors when unicode characters are in chat box.
2014/03/08
----------
* [ActorScroller] DrawByZPosition fixed for looping ActorScrollers.
* [Globals?] GetTimeSinceStart global lua function added.
* [Player] FirstTrack parameter added to JudgmentMessageCommand. (will change
before beta 4)
================================================================================
StepMania 5.0 beta 3 | 20140224
--------------------------------------------------------------------------------
2014/02/22
----------
* [Actor] texturetranslate lua function added.
* [BitmapText] distort lua function added.
* [ComboGraph] Added BodyHeight metric.
* [GameState] JoinInput lua function added.
* [PlayerOptions] "resetspeed" mod added.
* [PlayerStageStats] GetComboList and GetLifeRecord lua functions added.
* [Preferences] ComboContinuesBetweenSongs preference added.
* [ScreenWithMenuElements] SetAllowLateJoin lua function added.
* [SoundManager] loop and applyRate args added to PlayMusicPart lua function.
* [Sprite] SetCustomPosCoords lua function added.
* [Utils] XML backwards compatibility added.
2014/02/08
----------
* [Actor] Added heading, pitch, and roll lua functions.
2013/10/09
----------
* [CombinedLifeMeterTug] Added names and commands to Separator and Frame items.
@@ -573,7 +772,7 @@ StepMania 5.0 alpha 1 | 20120108
* [ScreenManager] Made AddScreenToTop take a second (optional) parameter for
posting a ScreenMessage on screen pop. [AJ]
* Only read certain tags during first load; makes song loading faster. [theDtTvB]
2012/01/07
----------
* Fix Portable.ini not working on Mac OS X. [shakesoda]
@@ -682,8 +881,8 @@ StepMania 5.0 alpha 1 | 20120108
2011/11/15
----------
* [LifeMeterBar] Added the ForceLifeDifficultyOnExtraStage metric and
the ExtraStageLifeDifficulty metric. Let the themer decide if extra stages
should have their own life bar behavior. Note that this metric does NOT
the ExtraStageLifeDifficulty metric. Let the themer decide if extra stages
should have their own life bar behavior. Note that this metric does NOT
change the lifebar to the battery style. [Wolfman2000/FSX]
2011/11/14
@@ -1228,7 +1427,7 @@ StepMania 5.0 Preview 2 | 20110703
2011/06/12
----------
* [ScreenNetSelectMusic] Add PlayerOptionsScreen metric. [AJ]
* [ScreenEdit] Restore the old PageUp/PageDown behavior, added Control +
* [ScreenEdit] Restore the old PageUp/PageDown behavior, added Control +
PageUp/PageDown to use recent time signature behavior. Laptop users, that
includes you guys too: semicolon and apostrophe are still good. [Wolfman2000]
@@ -1367,7 +1566,7 @@ StepMania 5.0 Preview 1 | 20110529
----------
* [ScreenGameplay] Removed hardcoded commands for Debug (give up text) and
replace them with DebugStartOnCommand, DebugBackOnCommand, and
DebugTweenOffCommand. [AJ]
DebugTweenOffCommand. [AJ]
* Added #SPEEDS to the SSC format. This multiplies your scrolling speed during
gameplay, not replaces it (see mod attacks for replacing). [Wolfman2000]
+7 -6
View File
@@ -1,6 +1,6 @@
sm-ssc/SM5 Code Style Guidelines
StepMania 5 Code Style Guidelines
--------------------------------------------------------------------------------
The sm-ssc/SM5 code style guidelines are as follows:
The StepMania 5 code style guidelines are as follows:
1) Follow the current coding conventions set forth in the source code.
This means use tabs. AJ prefers tabs have a width of 4. Visual Studio and web
@@ -34,8 +34,9 @@ if( anotherCondition )
lotsofstuff();
}
Variable naming conventions seem to be Hungarian, with m_ being used for
class member variables.
Variable naming conventions are largely Hungarian, with m_ being used for
class member variables. Some newer code is forgoing the use of Hungarian
prefixes.
2) Remove any unnecessary whitespace. "Unnecessary" whitespace includes tabs
at the end of } characters, tabs that lead nowhere, like this one:
@@ -69,7 +70,7 @@ inclusion.)
* in that instance. All new copyright notices should follow this style as well,
* for consistency's sake.
*/
/* use of long comments for one line is discouraged (with exceptions) */
// usually, it will will get cleaned up into this style, but there are exceptions:
@@ -91,4 +92,4 @@ void SomeFunction(size_t /*ACTUAL DATA TYPE*/)
* Pre-existing comments are usually trimmed to meet the 80-column width if they
* go way overboard. */
5) There are no other rules (yet).
5) There are no other rules (yet).
+11 -9
View File
@@ -1,17 +1,19 @@
sm-ssc has a few compile flags that are helpful to know, as well as ones
inherited from StepMania.
StepMania has a few compile flags that are helpful to know, as well as one
inherited from sm-ssc that should be nuked.
================================================================================
stepmania:
================================================================================
WITHOUT_NETWORKING
Disables all networking stuff (SMO).
Disables all networking stuff (e.g. StepMania Online).
--------------------------------------------------------------------------------
HAVE_VERSION_INFO
If this isn't defined, passing in --version will only show the name of the
current StepMania version, no build number or date.
Please define HAVE_VERSION_INFO if you can when building StepMania.
================================================================================
sm-ssc:
================================================================================
SSC_FUTURES
{todo}
--------------------------------------------------------------------------------
HAVE_VERSION_INFO
If this isn't defined, passing in --version will only show the name of the
current sm-ssc version, no build number or date.
Please define HAVE_VERSION_INFO if you can when building sm-ssc.
A highly deprecated thing. Anything related to this flag should be removed.
+1 -1
View File
@@ -14,4 +14,4 @@ Don't get burned out from nonstop development.
accepted and integrated. Common sense, but a golden rule nevertheless.
4) Anyone who decides to theme during development is willing to accept that
occasionally, changes to the default and/or fallback theme will break things.
occasionally, changes to the default and/or fallback theme will break things.
+4 -4
View File
@@ -8,7 +8,7 @@ This has nothing to do with the server versions (see below)
(NETPROTOCOLVERSION in NetworkSyncManager.h)
1: StepMania 3.9 (SMLan?)
2: StepMania 3.95
3: StepMania 4 alphas/sm-ssc v1.0 RC1-Final
3: StepMania 4 alphas, sm-ssc v1.0-v1.2.5, StepMania 5
==Server Versions==
1: SMLan (old)
@@ -31,8 +31,8 @@ Commands C2S 012-001 and 012-001: when there is no password the 'password' field
The default port is 8765/tcp, though this is actually assigned to Ultraseek HTTP
by the IANA (see http://www.iana.org/assignments/port-numbers).
A sm-ssc version of a online server for StepMania will use the currently
unassigned port 48040/tcp (and/or udp if the need arises).
A modern/official online server for StepMania will use the currently unassigned
port 48040/tcp (and/or udp if the need arises). (Port number subject to change.)
The protocol is packaged in "EzSockets Data Packets".
@@ -551,4 +551,4 @@ Payload:
0x01 Max players
NT Player1 name
...
NT Last player (PlayerN) name
NT Last player (PlayerN) name
+2 -2
View File
@@ -30,5 +30,5 @@ The Credentials section seems to be optional, but is useful to know about:
from the web site to StepMania for things like in-game uploads (instead of going
to stepmaniashare.com)"[1]
__________________________________________________________
[1] http://www.stepmania.com/forums/showthread.php?t=24203
[2] http://www.stepmania.com/test.smxml
[1] http://old.stepmania.com/forums/showthread.php?t=24203
[2] http://old.stepmania.com/test.smxml
+1 -1
View File
@@ -14,4 +14,4 @@ beat 453.72919 = 107.04103 seconds
00:47.228: fDeltaBeat = (NextBPMSeg 0.790333 - abs(fBPS 0.750000)) + (nextStartRow 21576 - thisRow 21384)
00:47.228: ==TimingData Delta as Beats==
00:47.228: fDeltaBeat = 4.000000 (beat)
00:47.228: fDeltaBeat = (NextBPMSeg 0.790333 - abs(fBPS 0.750000)) + (nextStartRow 21576 - thisRow 21384)
00:47.228: fDeltaBeat = (NextBPMSeg 0.790333 - abs(fBPS 0.750000)) + (nextStartRow 21576 - thisRow 21384)
+5 -8
View File
@@ -2,11 +2,8 @@
Version info displayed to the user.
These are the 'official' version designations:
* "experimental: pre-release versions
* "private beta v0.0": hmm, think about it for a second there.
==Public versions below this line==
* "v0.0 alpha #": Alpha versions (bug squashing, polishing until we reach beta)
* "v0.0 beta #": Beta versions (bug squashing, _focus_ is on high priority bugs)
* "v0.0 rc#": Release Candidates (if there are no problems, move on to final)
* "v0.0": Final Releases
These are the 'official' version designations:
* "v5.0 alpha #": Alpha versions (bug squashing, polishing until we reach beta)
* "v5.0 beta #": Beta versions (bug squashing, _focus_ is on high priority bugs)
* "v5.0 rc#": Release Candidates (if there are no problems, move on to final)
* "v5.0.0": Final Releases
+150 -90
View File
@@ -490,6 +490,7 @@
<Function name='GetDestFirstToDraw'/>
<Function name='GetDestNumToDraw'/>
<Function name='GetNumVertices'/>
<Function name='GetTexture'/>
<Function name='LoadTexture'/>
<Function name='SetDrawState'/>
<Function name='SetEffectMode'/>
@@ -585,6 +586,7 @@
<Function name='Stroke'/>
<Function name='distort'/>
<Function name='jitter'/>
<Function name='max_dimension_use_zoom'/>
<Function name='maxheight'/>
<Function name='maxwidth'/>
<Function name='rainbowscroll'/>
@@ -724,6 +726,9 @@
<Function name='GetFirstStepsTypeForGame'/>
<Function name='IsGameEnabled'/>
<Function name='StepsTypeToLocalizedString'/>
<Function name='SetGame'/>
<Function name='GetEnabledGames'/>
<Function name='GetStylesForGame'/>
</Class>
<Class name='GameSoundManager'>
<Function name='DimMusic'/>
@@ -807,6 +812,8 @@
<Function name='HasEarnedExtraStage'/>
<Function name='HaveProfileToLoad'/>
<Function name='HaveProfileToSave'/>
<Function name='InsertCoin'/>
<Function name='InsertCredit'/>
<Function name='InStepEditor'/>
<Function name='IsAnExtraStage'/>
<Function name='IsAnyHumanPlayerUsingMemoryCard'/>
@@ -834,8 +841,10 @@
<Function name='SaveProfiles'/>
<Function name='SetCharacter'/>
<Function name='SetCurrentCourse'/>
<Function name='SetCurrentPlayMode'/>
<Function name='SetCurrentSong'/>
<Function name='SetCurrentSteps'/>
<Function name='SetCurrentStyle'/>
<Function name='SetCurrentTrail'/>
<Function name='SetFailTypeExplicitlySet'/>
<Function name='SetJukeboxUsesModifiers'/>
@@ -946,6 +955,7 @@
</Class>
<Class base='WheelBase' name='MusicWheel'>
<Function name='ChangeSort'/>
<Function name='GetSelectedSection'/>
<Function name='IsRouletting'/>
<Function name='SelectCourse'/>
<Function name='SelectSong'/>
@@ -995,98 +1005,101 @@
<Function name='GetStepsQueueWrapped'/>
</Class>
<Class name='PlayerOptions'>
<Function name='IsEasierForSongAndSteps'/>
<Function name='IsEasierForCourseAndTrail'/>
<Function name='TimeSpacing'/>
<Function name='MaxScrollBPM'/>
<Function name='ScrollSpeed'/>
<Function name='ScrollBPM'/>
<Function name='Boost'/>
<Function name='Brake'/>
<Function name='Wave'/>
<Function name='Expand'/>
<Function name='Boomerang'/>
<Function name='Drunk'/>
<Function name='Dizzy'/>
<Function name='Confusion'/>
<Function name='Mini'/>
<Function name='Tiny'/>
<Function name='Flip'/>
<Function name='Invert'/>
<Function name='Tornado'/>
<Function name='Tipsy'/>
<Function name='Bumpy'/>
<Function name='Beat'/>
<Function name='Xmode'/>
<Function name='Twirl'/>
<Function name='Roll'/>
<Function name='Hidden'/>
<Function name='HiddenOffset'/>
<Function name='Sudden'/>
<Function name='SuddenOffset'/>
<Function name='Stealth'/>
<Function name='Blink'/>
<Function name='RandomVanish'/>
<Function name='Reverse'/>
<Function name='Split'/>
<Function name='Alternate'/>
<Function name='Cross'/>
<Function name='Centered'/>
<Function name='Dark'/>
<Function name='Blind'/>
<Function name='Cover'/>
<Function name='RandAttack'/>
<Function name='NoAttack'/>
<Function name='PlayerAutoPlay'/>
<Function name='Tilt'/>
<Function name='Skew'/>
<Function name='Passmark'/>
<Function name='RandomSpeed'/>
<Function name='TurnNone'/>
<Function name='Mirror'/>
<Function name='Backwards'/>
<Function name='Left'/>
<Function name='Right'/>
<Function name='Shuffle'/>
<Function name='SoftShuffle'/>
<Function name='SuperShuffle'/>
<Function name='NoHolds'/>
<Function name='NoRolls'/>
<Function name='NoMines'/>
<Function name='Little'/>
<Function name='Wide'/>
<Function name='Big'/>
<Function name='Quick'/>
<Function name='BMRize'/>
<Function name='Skippy'/>
<Function name='Mines'/>
<Function name='AttackMines'/>
<Function name='Echo'/>
<Function name='Stomp'/>
<Function name='Planted'/>
<Function name='Floored'/>
<Function name='Twister'/>
<Function name='HoldRolls'/>
<Function name='NoJumps'/>
<Function name='NoHands'/>
<Function name='NoLifts'/>
<Function name='NoFakes'/>
<Function name='NoQuads'/>
<Function name='NoStretch'/>
<Function name='MuteOnError'/>
<Function name='NoteSkin'/>
<Function name='FailSetting'/>
<Function name='Backwards'/>
<Function name='BatteryLives'/>
<Function name='Beat'/>
<Function name='Big'/>
<Function name='Blind'/>
<Function name='Blink'/>
<Function name='Boomerang'/>
<Function name='Boost'/>
<Function name='BMRize'/>
<Function name='Brake'/>
<Function name='Bumpy'/>
<Function name='Centered'/>
<Function name='CMod'/>
<Function name='XMod'/>
<Function name='MMod'/>
<Function name='Overhead'/>
<Function name='Incoming'/>
<Function name='Space'/>
<Function name='Hallway'/>
<Function name='Confusion'/>
<Function name='Cover'/>
<Function name='Cross'/>
<Function name='Dark'/>
<Function name='Dizzy'/>
<Function name='Distant'/>
<Function name='UsingReverse'/>
<Function name='DrainSetting'/>
<Function name='Drunk'/>
<Function name='Echo'/>
<Function name='Expand'/>
<Function name='FailSetting'/>
<Function name='Flip'/>
<Function name='Floored'/>
<Function name='GetReversePercentForColumn'/>
<Function name='GetStepAttacks'/>
<Function name='IsEasierForSongAndSteps'/>
<Function name='IsEasierForCourseAndTrail'/>
<Function name='Incoming'/>
<Function name='Hallway'/>
<Function name='Hidden'/>
<Function name='HiddenOffset'/>
<Function name='HoldRolls'/>
<Function name='Invert'/>
<Function name='Left'/>
<Function name='LifeSetting'/>
<Function name='Little'/>
<Function name='MaxScrollBPM'/>
<Function name='Mines'/>
<Function name='Mini'/>
<Function name='Mirror'/>
<Function name='MMod'/>
<Function name='MuteOnError'/>
<Function name='NoAttack'/>
<Function name='NoFakes'/>
<Function name='NoHands'/>
<Function name='NoHolds'/>
<Function name='NoJumps'/>
<Function name='NoLifts'/>
<Function name='NoMines'/>
<Function name='NoQuads'/>
<Function name='NoRolls'/>
<Function name='NoStretch'/>
<Function name='NoteSkin'/>
<Function name='Overhead'/>
<Function name='Passmark'/>
<Function name='Planted'/>
<Function name='PlayerAutoPlay'/>
<Function name='Quick'/>
<Function name='RandAttack'/>
<Function name='RandomSpeed'/>
<Function name='RandomVanish'/>
<Function name='Reverse'/>
<Function name='Right'/>
<Function name='Roll'/>
<Function name='ScrollBPM'/>
<Function name='ScrollSpeed'/>
<Function name='Shuffle'/>
<Function name='Skew'/>
<Function name='Skippy'/>
<Function name='SoftShuffle'/>
<Function name='Space'/>
<Function name='Split'/>
<Function name='Stealth'/>
<Function name='Stomp'/>
<Function name='Sudden'/>
<Function name='SuddenOffset'/>
<Function name='SuperShuffle'/>
<Function name='TimeSpacing'/>
<Function name='Tilt'/>
<Function name='Tiny'/>
<Function name='Tipsy'/>
<Function name='Tornado'/>
<Function name='TurnNone'/>
<Function name='Twirl'/>
<Function name='Twister'/>
<Function name='UsingReverse'/>
<Function name='Wave'/>
<Function name='Wide'/>
<Function name='XMod'/>
<Function name='Xmode'/>
</Class>
<Class name='PlayerStageStats'>
<Function name='FailPlayer'/>
@@ -1288,6 +1301,7 @@
<Function name='loop'/>
<Function name='position'/>
<Function name='rate'/>
<Function name='Reload'/>
</Class>
<Class base='RageTexture' name='RageTextureRenderTarget'>
<Function name='BeginRenderingTo'/>
@@ -1307,6 +1321,7 @@
<Function name='Metric'/>
<Function name='PostScreenMessage'/>
<Function name='RemoveInputCallback'/>
<Function name='SetNextScreenName'/>
<Function name='String'/>
<Function name='lockinput'/>
</Class>
@@ -1509,10 +1524,7 @@
<Function name='AssistClap'/>
<Function name='AssistMetronome'/>
<Function name='AutosyncSetting'/>
<Function name='BatteryLives'/>
<Function name='DrainSetting'/>
<Function name='Haste'/>
<Function name='LifeSetting'/>
<Function name='MusicRate'/>
<Function name='RandomBGOnly'/>
<Function name='SaveReplay'/>
@@ -1630,6 +1642,33 @@
<Function name='LockedDifficulty'/>
<Function name='NeedsZoomOutWith2Players'/>
</Class>
<Class name='TapNote'>
<Function name='GetTapNoteType'/>
<Function name='GetTapNoteSubType'/>
<Function name='GetTapNoteSource'/>
<Function name='GetTapNoteResult'/>
<Function name='GetPlayerNumber'/>
<Function name='GetAttackModifiers'/>
<Function name='GetAttackDuration'/>
<Function name='GetKeysoundIndex'/>
<Function name='GetHoldDuration'/>
<Function name='GetHoldNoteResult'/>
</Class>
<Class name='TapNoteResult'>
<Function name='GetTapNoteScore'/>
<Function name='GetTapNoteOffset'/>
<Function name='GetHidden'/>
</Class>
<Class name='HoldNoteResult'>
<Function name='GetHoldNoteScore'/>
<Function name='GetLife'/>
<Function name='GetOverlappedTime'/>
<Function name='GetLastHeldBeat'/>
<Function name='GetCheckpointsHit'/>
<Function name='GetCheckpointsMissed'/>
<Function name='GetHeld'/>
<Function name='GetActive'/>
</Class>
<Class base='ActorFrame' name='TextBanner'>
<Function name='Load'/>
<Function name='SetFromSong'/>
@@ -1661,6 +1700,7 @@
<Function name='IsThemeSelectable'/>
<Function name='ReloadMetrics'/>
<Function name='RunLuaScripts'/>
<Function name='SetTheme'/>
</Class>
<Class name='TimingData'>
<Function name='GetActualBPM'/>
@@ -1763,6 +1803,7 @@
<Function name='GetColor'/>
<Function name='GetText'/>
<Function name='GetType'/>
<Function name='IsLoaded'/>
</Class>
<Class base='ActorFrame' name='WorkoutGraph'>
<Function name='SetFromCurrentWorkout'/>
@@ -2401,6 +2442,25 @@
<EnumValue name='&apos;TapNoteScoreJudgeType_MinimumScore&apos;' value='0'/>
<EnumValue name='&apos;TapNoteScoreJudgeType_LastScore&apos;' value='1'/>
</Enum>
<Enum name='TapNoteType'>
<EnumValue name='&apos;TapNoteType_Empty&apos;' value='0'/>
<EnumValue name='&apos;TapNoteType_Tap&apos;' value='1'/>
<EnumValue name='&apos;TapNoteType_HoldHead&apos;' value='2'/>
<EnumValue name='&apos;TapNoteType_HoldTail&apos;' value='3'/>
<EnumValue name='&apos;TapNoteType_Mine&apos;' value='4'/>
<EnumValue name='&apos;TapNoteType_Lift&apos;' value='5'/>
<EnumValue name='&apos;TapNoteType_Attack&apos;' value='6'/>
<EnumValue name='&apos;TapNoteType_AutoKeysound&apos;' value='7'/>
<EnumValue name='&apos;TapNoteType_Fake&apos;' value='8'/>
</Enum>
<Enum name='TapNoteSubType'>
<EnumValue name='&apos;TapNoteSubType_Hold&apos;' value='0'/>
<EnumValue name='&apos;TapNoteSubType_Roll&apos;' value='1'/>
</Enum>
<Enum name='TapNoteSource'>
<EnumValue name='&apos;TapNoteSource_Original&apos;' value='0'/>
<EnumValue name='&apos;TapNoteSource_Addition&apos;' value='1'/>
</Enum>
<Enum name='TextGlowMode'>
<EnumValue name='&apos;TextGlowMode_Inner&apos;' value='0'/>
<EnumValue name='&apos;TextGlowMode_Stroke&apos;' value='1'/>
@@ -2490,5 +2550,5 @@
<Constant name='top' value='&apos;VertAlign_Top&apos;'/>
</Constants>
<Version>StepMania v5.0 beta 3</Version>
<Date>2014-06-27</Date>
<Date>2014-09-15</Date>
</Lua>
+341 -192
View File
@@ -31,6 +31,9 @@ save yourself some time, copy this for undocumented things:
<Function name='Alpha' theme='_fallback' return='color' arguments='color c, float percent'>
[02 Colors.lua] Returns a <code>color</code> with the specified alpha.
</Function>
<Function name='ArbitrarySpeedMods' theme='_fallback' return='LuaOptionRow' arguments=''>
[03 CustomSpeedMods.lua]
</Function>
<Function name='AreStagePlayerModsForced' theme='_fallback' return='bool' arguments=''>
[02 StageMods.lua]
</Function>
@@ -450,7 +453,7 @@ save yourself some time, copy this for undocumented things:
<Function name='Saturation' theme='_fallback' return='color' arguments='color c, float percent'>
[02 Colors.lua] Modifies the saturation of the specified color
</Function>
<Function name='SaveScreenshot' return= 'bool, string' arguments='PlayerNumber pn, bool compress, bool sign, string prefix, string suffix'>
<Function name='SaveScreenshot' return='bool, string' arguments='PlayerNumber pn, bool compress, bool sign, string prefix, string suffix'>
Saves a screenshot. If pn is nil, saves to the machine's Screenshots dir, otherwise saves to the profile's Screenshots dir. Saves as jpg if compress is true, or png if compress is false. The screenshot is signed if sign is true. prefix and suffix are optional strings to add to the beginning and end of the filename.<br/>
Returns success and full path of the resulting screenshot.
</Function>
@@ -645,56 +648,56 @@ save yourself some time, copy this for undocumented things:
<Function name='Update' return='void' arguments=''>
Updates ArrowEffects, which sets current values for Tornado, Invert, and Beat.
</Function>
<Function name='GetYOffset' return='float fYOffset' arguments='PlayerState ps, int iCol, float fNoteBeat'>
<Function name='GetYOffset' return='float' arguments='PlayerState ps, int iCol, float fNoteBeat'>
Returns the Y Offset of a note in column <code>iCol</code> at beat <code>fNoteBeat</code> for the provided PlayerState. Y Offset is affected by Speed mods and Accel mods, and impacts most other arrow effects.
</Function>
<Function name='GetYPos' return='float fYPos' arguments='PlayerState ps, int iCol, float fYOffset, float fYReverseOffsetPixels'>
<Function name='GetYPos' return='float' arguments='PlayerState ps, int iCol, float fYOffset, float fYReverseOffsetPixels'>
Returns the Y position of a note in column <code>iCol</code> with a Y offset of <code>fYOffset</code> for the provided PlayerState.<br/>
<code>fYReverseOffsetPixels</code> is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for <code>[Player]</code>
</Function>
<Function name='GetYOffsetFromYPos' return='float fYOffset' arguments='PlayerState ps, int iCol, float fYPos, float fYReverseOffsetPixels'>
<Function name='GetYOffsetFromYPos' return='float' arguments='PlayerState ps, int iCol, float fYPos, float fYReverseOffsetPixels'>
Returns the Y offset of a note in column <code>iCol</code> with a Y position of <code>fYPos</code> for the provided PlayerState.<br/>
<code>fYReverseOffsetPixels</code> is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for <code>[Player]</code>
</Function>
<Function name='GetXPos' return='float fXPos' arguments='PlayerState ps, int iCol, float fYOffset'>
<Function name='GetXPos' return='float' arguments='PlayerState ps, int iCol, float fYOffset'>
Returns the X position of a note in column <code>iCol</code> with a Y offset of <code>fYOffset</code> for the provided PlayerState.
</Function>
<Function name='GetZPos' return='float fZPos' arguments='PlayerState ps, int iCol, float fYOffset'>
<Function name='GetZPos' return='float' arguments='PlayerState ps, int iCol, float fYOffset'>
Returns the Z position of a note in column <code>iCol</code> with a Y offset of <code>fYOffset</code> for the provided PlayerState.
</Function>
<Function name='GetRotationX' return='float fRotationX' arguments='PlayerState ps, float fYOffset'>
<Function name='GetRotationX' return='float' arguments='PlayerState ps, float fYOffset'>
Returns the X rotation of a note with a Y offset of <code>fYOffset</code> for the provided PlayerState.
</Function>
<Function name='GetRotationY' return='float fRotationY' arguments='PlayerState ps, float fYOffset'>
<Function name='GetRotationY' return='float' arguments='PlayerState ps, float fYOffset'>
Returns the Y rotation of a note with a Y offset of <code>fYOffset</code> for the provided PlayerState.
</Function>
<Function name='GetRotationZ' return='float fRotationZ' arguments='PlayerState ps, float fNoteBeat, bool bIsHoldHead'>
<Function name='GetRotationZ' return='float' arguments='PlayerState ps, float fNoteBeat, bool bIsHoldHead'>
Returns the Z rotation of a note at beat <code>fNoteBeat</code> for the provided PlayerState.<br/>
<code>bIsHoldHead</code> is an optional argument which defaults to false. If true, this function will return <code>0</code> if the [ArrowEffects] metric <code>DizzyHoldHeads</code> is false.
</Function>
<Function name='ReceptorGetRotationZ' return='float fRotationZ' arguments='PlayerState ps'>
<Function name='ReceptorGetRotationZ' return='float' arguments='PlayerState ps'>
Returns the Z rotation of the receptors for the provided PlayerState.
</Function>
<Function name='GetAlpha' return='float fAlpha' arguments='PlayerState ps, int iCol, float fYOffset, float fPercentFadeToFail, float fYReverseOffsetPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar'>
<Function name='GetAlpha' return='float' arguments='PlayerState ps, int iCol, float fYOffset, float fPercentFadeToFail, float fYReverseOffsetPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar'>
Returns the Alpha of a note in column <code>iCol</code> with a Y offset of <code>fYOffset</code> for the provided PlayerState.<br/>
<code>fPercentFadeToFail</code> is optional and defaults to -1.<br/>
<code>fYReverseOffsetPixels</code> is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for <code>[Player]</code><br/>
<code>fDrawDistanceBeforeTargetsPixels</code> is optional and will pull defaults from the <code>[Player]</code> metric <code>DrawDistanceBeforeTargetsPixels</code><br/>
<code>fFadeInPercentOfDrawFar</code> is optional and will pull defaults from the <code>[NoteField]</code> metric <code>FadeBeforeTargetsPercent</code><br/>
</Function>
<Function name='GetGlow' return='float fGlow' arguments='PlayerState ps, int iCol, float fYOffset, float fPercentFadeToFail, float fYReverseOffsetPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar'>
<Function name='GetGlow' return='float' arguments='PlayerState ps, int iCol, float fYOffset, float fPercentFadeToFail, float fYReverseOffsetPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar'>
Returns the Glow of a note in column <code>iCol</code> with a Y offset of <code>fYOffset</code> for the provided PlayerState. The arguments are the same as for GetAlpha.
</Function>
<Function name='GetBrightness' return='float fBrightness' arguments='PlayerState ps, float fNoteBeat'>
<Function name='GetBrightness' return='float' arguments='PlayerState ps, float fNoteBeat'>
Returns the brightness of a note at beat <code>fNoteBeat</code> for the provided PlayerState.
</Function>
<Function name='NeedZBuffer' return='bool bNeedZBuffer' arguments='PlayerState ps'>
<Function name='NeedZBuffer' return='bool' arguments='PlayerState ps'>
Returns true if any arrow effects for the provided PlayerState require the z buffer.
</Function>
<Function name='GetZoom' return='float fZoom' arguments='PlayerState ps'>
<Function name='GetZoom' return='float' arguments='PlayerState ps'>
Returns the zoom of a note for the provided PlayerState.
</Function>
<Function name='GetFrameWidthScale' return='float fFameWidthScale' arguments='PlayerState ps, float fYOffset, fOverlappedTime'>
<Function name='GetFrameWidthScale' return='float' arguments='PlayerState ps, float fYOffset, fOverlappedTime'>
Returns the FrameWidthScale of a hold part with a Y offset of <code>fYOffset</code> for the provided PlayerState.<br/> <code>fOverlappedTime</code> is optional and will default to 0.
</Function>
</Namespace>
@@ -752,7 +755,7 @@ save yourself some time, copy this for undocumented things:
Tries to read the file at <code>sPath</code>. If successful, it returns the file's contents.
If unsuccessful, it returns two values: <code>nil</code> and <code>"error"</code>.
</Function>
<Function name='ReportScriptError' return='' arguments= 'string error, string error_type'>
<Function name='ReportScriptError' return='void' arguments='string error, string error_type'>
Reports the error through the error reporting system. error_type is the type used for the dialog that is presented, a dialog will not appear for a type the user has chosen to ignore.<br/>
error is optional an defaults to "Script error occurred.". error_type is optional and defaults to "LUA_ERROR".
</Function>
@@ -1535,6 +1538,9 @@ save yourself some time, copy this for undocumented things:
<Function name='GetCurrNumToDraw' return='int' arguments='void'>
Get the NumToDraw of the current tween state.
</Function>
<Function name='GetTexture' return='RageTexture' arguments=''>
Returns the ActorMultiVertex's texture.
</Function>
<Function name='SetEffectMode' return='void' arguments='EffectMode em'>
Sets the <Link class='ENUM' function='EffectMode'>EffectMode</Link> of the ActorMultiVertex.
</Function>
@@ -1572,6 +1578,9 @@ save yourself some time, copy this for undocumented things:
<Function name='GetNumItems' return='int' arguments=''>
Returns the number of items in the ActorScroller.
</Function>
<Function name='GetSecondsPauseBetweenItems' return='float' arguments=''>
Returns the number of seconds the scroller pauses between items.
</Function>
<Function name='GetSecondsToDestination' renamed='true' return='float' arguments=''>
Returns the number of seconds until the scroller reaches its destination.
</Function>
@@ -1772,6 +1781,9 @@ save yourself some time, copy this for undocumented things:
<Function name='jitter' return='void' arguments='bool bJitter'>
If <code>bJitter</code> is <code>true</code>, move each character of the string around by a small random amount.
</Function>
<Function name='max_dimension_use_zoom' return='void' arguments='bool use_zoom'>
If use_zoom is true, this BitmapText will use the zoom that has been applied to it when calculating to change its base zoom from maxheight or maxwidth.
</Function>
<Function name='maxheight' return='void' arguments='float fHeight'>
Set the maximum height of the unzoomed text to <code>fHeight</code>. If <code>fHeight</code> is <code>0</code>, then there is no maximum height.
</Function>
@@ -2180,6 +2192,18 @@ save yourself some time, copy this for undocumented things:
<Function name='StepsTypeToLocalizedString' return='string' arguments='StepsType st'>
Return the localized string representation of <code>st</code>.
</Function>
<Function name='GetEnabledGames' return='{string}'>
Returns a table of all selectable games.
</Function>
<Function name='GetStylesForGame' return='{style}' arguments='string game'>
Returns a table of all the styles for the that exist for <code>game</code>.
</Function>
<Function name='SetGame' return='void' arguments='string Game, string Theme' >
Sets the current game to <code>Game</code>. The second argument is optional, and if provided will determine which theme is loaded when the game changes. If the second argument is not provided, the default theme from the preferences for the new game type will be loaded.<br />
If only the game changes, the screen specified by the Common::AfterGameChangeScreen metric will be loaded.<br />
If the game and the theme both change, the screen specified by the Common::AfterGameAndThemeChangeScreen metric will be loaded.<br />
The Common::InitialScreen metric will be used if the appropriate metric for the change is blank or invalid.
</Function>
</Class>
<Class name='GameSoundManager'>
<Function name='DimMusic' return='void' arguments='float fVolume, float fDuration'>
@@ -2460,6 +2484,13 @@ save yourself some time, copy this for undocumented things:
editing portion. If in recording or playing mode, this will return
<code>false</code>.
</Function>
<Function name='InsertCoin' return='void' arguments='int iCoins'>
Inserts <code>iCoins</code> number of coins. <code>iCoins</code> can be negative or positive.
</Function>
<Function name='InsertCredit' return='void' arguments=''>
Inserts one credit. To deduct a credit, pass a negative integer representing the number
of coins per credit to <Link class='GameState' function='InsertCoin'>InsertCoin</Link>.
</Function>
<Function name='IsAnExtraStage' return='bool' arguments=''>
Returns <code>true</code> if this is an extra stage.
</Function>
@@ -2538,12 +2569,18 @@ save yourself some time, copy this for undocumented things:
<Function name='SetCurrentCourse' return='void' arguments='Course course'>
Sets the current Course to <code>course</code>.
</Function>
<Function name='SetCurrentPlayMode' return='void' arguments='PlayMode pm'>
Sets the current PlayMode to <code>pm</code>.
</Function>
<Function name='SetCurrentSong' return='void' arguments='Song song'>
Sets the current Song to <code>song</code>.
</Function>
<Function name='SetCurrentSteps' return='void' arguments='PlayerNumber pn, Steps steps'>
Sets Player <code>pn</code>'s current Steps to <code>steps</code>.
</Function>
<Function name='SetCurrentStyle' return='void' arguments='Style style or string sStyle'>
Sets current Style to the provided style. Either a style object or a style string can be provided. If current steps for either player are not valid in the new style, they will be cleared.
</Function>
<Function name='SetCurrentTrail' return='void' arguments='Trail trail'>
Sets the current Trail to <code>trail</code>.
</Function>
@@ -2822,6 +2859,9 @@ save yourself some time, copy this for undocumented things:
<Function name='ChangeSort' return='bool' arguments='SortOrder so'>
Changes the sort order of the wheel. Returns <code>true</code> if the order was changed.
</Function>
<Function name='GetSelectedSection' return='string' arguments=''>
Returns the name of the currently selected section.
</Function>
<Function name='IsRouletting' return='bool' arguments=''>
Returns <code>true</code> if the MusicWheel is currently handling Roulette selection.
</Function>
@@ -2962,117 +3002,101 @@ save yourself some time, copy this for undocumented things:
Enum type options are almost identical to bool type. They take and return an enum value.<br />
For brevity, the functions are only given a description if the option requires careful handling or does not follow the float or bool interfaces.<br />
</Description>
<Function name='Alternate' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='AttackMines' return='bool' arguments='bool value'> </Function>
<Function name='BatteryLives' return='int' arguments='int num'> </Function>
<Function name='Backwards' return='bool' arguments='bool value'> </Function>
<Function name='Beat' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Big' return='bool' arguments='bool value'> </Function>
<Function name='Blink' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Blind' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='BMRize' return='bool' arguments='bool value'> </Function>
<Function name='Boomerang' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Boost' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Brake' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Bumpy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Centered' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='CMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a CMod set, returns the value of that CMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the CMod to the value and disables any XMod or MMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.
</Function>
<Function name='Confusion' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Cover' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Cross' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Dark' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Dizzy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Distant' return='float, float' arguments='float value, float approach_speed'>
If the player is using Distant (zero skew and positive tilt), returns the value of tilt and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to value and skew to zero.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='DrainSetting' return= 'DrainType' arguments='DrainType type'> </Function>
<Function name='Drunk' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Echo' return='bool' arguments='bool value'> </Function>
<Function name='Expand' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='FailSetting' return='FailType' arguments='FailType'>
Sets the <Link class='ENUM' function='FailType' /> for the player, if the optional argument is provided. Returns the <Link class='ENUM' function='FailType' /> that was previously set.
</Function>
<Function name='Flip' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Floored' return='bool' arguments='bool value'> </Function>
<Function name='GetStepAttacks' return='bool' argument=''>
Returns true if step attacks or random attacks are enabled.
</Function>
<Function name='IsEasierForCourseAndTrail' return='bool' arguments='Course c, Trail t'>
Returns <code>true</code> if the current PlayerOptions makes the current Course/Trail easier.
</Function>
<Function name='IsEasierForSongAndSteps' return='bool' arguments='Song so, Steps st'>
Returns <code>true</code> if the current PlayerOptions makes the current Song/Steps easier.
</Function>
<Function name='TimeSpacing' return='float, float' arguments='float value, float approach_speed'>
TimeSpacing is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It controls whether the speed mod is in X mode or C mode. It should only be set to 0 or 1, and is only a float value to allow tweening between the two states.
<Function name='Hallway' return='float, float' arguments='float value, float approach_speed'>
If the player is using Hallway (zero skew and negative tilt), returns the value of tilt and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to negative value and skew to zero.<br />
Pass in a positive value for the familiar meaning of Hallway.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Hidden' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='HiddenOffset' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='HoldRolls' return='bool' arguments='bool value'> </Function>
<Function name='Incoming' return='float, float' arguments='float value, float approach_speed'>
If the player is using Incoming ((positive skew and negative tilt) or (negative skew and positive tilt)), returns the value of skew and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to negative value and skew to value.<br />
Pass in a positive value for the familiar meaning of Incoming.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Invert' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Left' return='bool' arguments='bool value'> </Function>
<Function name='LifeSetting' return='LifeType' arguments='LifeType type'> </Function>
<Function name='Little' return='bool' arguments='bool value'> </Function>
<Function name='MaxScrollBPM' return='float, float' arguments='float value, float approach_speed'>
MaxScrollBPM is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It is the setting for the MMod.<br />
MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
</Function>
<Function name='ScrollSpeed' return='float, float' arguments='float value, float approach_speed'>
ScrollSpeed is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It is the setting for the XMod.
</Function>
<Function name='ScrollBPM' return='float, float' arguments='float value, float approach_speed'>
ScrollBPM is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It is the setting for the CMod.
</Function>
<Function name='Boost' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Brake' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Wave' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Expand' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Boomerang' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Drunk' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Dizzy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Confusion' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Mini' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tiny' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Flip' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Invert' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tornado' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tipsy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Bumpy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Beat' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Xmode' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Twirl' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Roll' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Hidden' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='HiddenOffset' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Sudden' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='SuddenOffset' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Stealth' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Blink' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='RandomVanish' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Reverse' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Split' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Alternate' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Cross' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Centered' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Dark' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Blind' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Cover' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='RandAttack' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='NoAttack' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='PlayerAutoPlay' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tilt' return='float, float' arguments='float value, float approach_speed'>
Tilt is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.<br />
Tilt tilts the note field forward and back.
</Function>
<Function name='Skew' return='float, float' arguments='float value, float approach_speed'>
Skew is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.<br />
Skew moves the vanishing point for the note field away from the center of the screen.<br />
Skew has no effect in single mode if Center1Player is true.<br />
Skew has no effect in double mode.<br />
</Function>
<Function name='Passmark' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='RandomSpeed' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='TurnNone' return='bool' arguments='bool value'> </Function>
<Function name='Mirror' return='bool' arguments='bool value'> </Function>
<Function name='Backwards' return='bool' arguments='bool value'> </Function>
<Function name='Left' return='bool' arguments='bool value'> </Function>
<Function name='Right' return='bool' arguments='bool value'> </Function>
<Function name='Shuffle' return='bool' arguments='bool value'> </Function>
<Function name='SoftShuffle' return='bool' arguments='bool value'> </Function>
<Function name='SuperShuffle' return='bool' arguments='bool value'> </Function>
<Function name='NoHolds' return='bool' arguments='bool value'> </Function>
<Function name='NoRolls' return='bool' arguments='bool value'> </Function>
<Function name='NoMines' return='bool' arguments='bool value'> </Function>
<Function name='Little' return='bool' arguments='bool value'> </Function>
<Function name='Wide' return='bool' arguments='bool value'> </Function>
<Function name='Big' return='bool' arguments='bool value'> </Function>
<Function name='Quick' return='bool' arguments='bool value'> </Function>
<Function name='BMRize' return='bool' arguments='bool value'> </Function>
<Function name='Skippy' return='bool' arguments='bool value'> </Function>
<Function name='Mines' return='bool' arguments='bool value'> </Function>
<Function name='AttackMines' return='bool' arguments='bool value'> </Function>
<Function name='Echo' return='bool' arguments='bool value'> </Function>
<Function name='Stomp' return='bool' arguments='bool value'> </Function>
<Function name='Planted' return='bool' arguments='bool value'> </Function>
<Function name='Floored' return='bool' arguments='bool value'> </Function>
<Function name='Twister' return='bool' arguments='bool value'> </Function>
<Function name='HoldRolls' return='bool' arguments='bool value'> </Function>
<Function name='Mini' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Mirror' return='bool' arguments='bool value'> </Function>
<Function name='MMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a MMod set, returns the value of that MMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the MMod to the value and disables any CMod or XMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.<br />
MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
</Function>
<Function name='MuteOnError' return='bool' arguments='bool value'> </Function>
<Function name='NoAttack' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='NoFakes' return='bool' arguments='bool value'> </Function>
<Function name='NoHolds' return='bool' arguments='bool value'> </Function>
<Function name='NoJumps' return='bool' arguments='bool value'> </Function>
<Function name='NoHands' return='bool' arguments='bool value'> </Function>
<Function name='NoLifts' return='bool' arguments='bool value'> </Function>
<Function name='NoFakes' return='bool' arguments='bool value'> </Function>
<Function name='NoQuads' return='bool' arguments='bool value'> </Function>
<Function name='NoStretch' return='bool' arguments='bool value'> </Function>
<Function name='MuteOnError' return='bool' arguments='bool value'> </Function>
<Function name='UsingReverse' return='bool' arguments=''>
Returns <code>true</code> if the player is using reverse. (equivalent to <code>GetReverse() == 1.0</code>)
</Function>
<Function name='NoMines' return='bool' arguments='bool value'> </Function>
<Function name='NoRolls' return='bool' arguments='bool value'> </Function>
<Function name='NoteSkin' return='string, bool' arguments='string name'>
Sets the NoteSkin to the named noteskin, unless name is nil or the noteskin does not exist. Returns the name of the previous noteskin and whether the set attempt succeeded.<br />
Changing the noteskin during a song is not supported.<br />
@@ -3080,58 +3104,77 @@ save yourself some time, copy this for undocumented things:
note_name= options:NoteSkin() -- Sets note_name to the player's current noteskin.<br />
prev_note_name, succeeded= options:NoteSkin("cel") -- Sets prev_note_name to the noteskin the player had set, changes the current noteskin to "cel", sets succeeded to true if the the "cel" noteskin exists.<br />
</Function>
<Function name='FailSetting' return='FailType' arguments='FailType'>
Sets the <Link class='ENUM' function='FailType' /> for the player, if the optional argument is provided. Returns the <Link class='ENUM' function='FailType' /> that was previously set.
<Function name='Overhead' return='bool' arguments='bool'>
If the player is using Overhead (0 tilt, 0 skew), returns true.<br />
If true is passed, sets the tilt and skew to 0.
</Function>
<Function name='CMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a CMod set, returns the value of that CMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the CMod to the value and disables any XMod or MMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.
</Function>
<Function name='XMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a XMod set, returns the value of that XMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the XMod to the value and disables any CMod or MMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.
</Function>
<Function name='MMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a MMod set, returns the value of that MMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the MMod to the value and disables any CMod or XMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.<br />
MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
</Function>
<Function name='Overhead' return='bool' arguments='bool'>
If the player is using Overhead (0 tilt, 0 skew), returns true.<br />
If true is passed, sets the tilt and skew to 0.
</Function>
<Function name='Incoming' return='float, float' arguments='float value, float approach_speed'>
If the player is using Incoming ((positive skew and negative tilt) or (negative skew and positive tilt)), returns the value of skew and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to negative value and skew to value.<br />
Pass in a positive value for the familiar meaning of Incoming.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Space' return='float, float' arguments='float value, float approach_speed'>
If the player is using Space ((positive skew and positive tilt) or (negative skew and negative tilt)), returns the value of skew and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to value and skew to value.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Hallway' return='float, float' arguments='float value, float approach_speed'>
If the player is using Hallway (zero skew and negative tilt), returns the value of tilt and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to negative value and skew to zero.<br />
Pass in a positive value for the familiar meaning of Hallway.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Distant' return='float, float' arguments='float value, float approach_speed'>
If the player is using Distant (zero skew and positive tilt), returns the value of tilt and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to value and skew to zero.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='GetStepAttacks' return='bool' argument=''>
Returns true if step attacks or random attacks are enabled.
</Function>
<Function name='Passmark' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Planted' return='bool' arguments='bool value'> </Function>
<Function name='PlayerAutoPlay' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Quick' return='bool' arguments='bool value'> </Function>
<Function name='RandAttack' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='RandomSpeed' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='RandomVanish' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Reverse' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Right' return='bool' arguments='bool value'> </Function>
<Function name='Roll' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='ScrollBPM' return='float, float' arguments='float value, float approach_speed'>
ScrollBPM is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It is the setting for the CMod.
</Function>
<Function name='ScrollSpeed' return='float, float' arguments='float value, float approach_speed'>
ScrollSpeed is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It is the setting for the XMod.
</Function>
<Function name='Shuffle' return='bool' arguments='bool value'> </Function>
<Function name='Skew' return='float, float' arguments='float value, float approach_speed'>
Skew is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.<br />
Skew moves the vanishing point for the note field away from the center of the screen.<br />
Skew has no effect in single mode if Center1Player is true.<br />
Skew has no effect in double mode.<br />
</Function>
<Function name='Skippy' return='bool' arguments='bool value'> </Function>
<Function name='SoftShuffle' return='bool' arguments='bool value'> </Function>
<Function name='Space' return='float, float' arguments='float value, float approach_speed'>
If the player is using Space ((positive skew and positive tilt) or (negative skew and negative tilt)), returns the value of skew and its approach_speed.<br />
Returns nil otherwise.<br />
If the optional first argument is passed, sets tilt to value and skew to value.<br />
If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
</Function>
<Function name='Split' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Stealth' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Stomp' return='bool' arguments='bool value'> </Function>
<Function name='Sudden' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='SuddenOffset' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='SuperShuffle' return='bool' arguments='bool value'> </Function>
<Function name='TimeSpacing' return='float, float' arguments='float value, float approach_speed'>
TimeSpacing is one of the variables for controlling the speed mod.<br />
Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.<br />
It controls whether the speed mod is in X mode or C mode. It should only be set to 0 or 1, and is only a float value to allow tweening between the two states.
</Function>
<Function name='Tilt' return='float, float' arguments='float value, float approach_speed'>
Tilt is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.<br />
Tilt tilts the note field forward and back.
</Function>
<Function name='Tiny' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tipsy' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Tornado' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='TurnNone' return='bool' arguments='bool value'> </Function>
<Function name='Twirl' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Twister' return='bool' arguments='bool value'> </Function>
<Function name='UsingReverse' return='bool' arguments=''>
Returns <code>true</code> if the player is using reverse. (equivalent to <code>GetReverse() == 1.0</code>)
</Function>
<Function name='Wave' return='float, float' arguments='float value, float approach_speed'> </Function>
<Function name='Wide' return='bool' arguments='bool value'> </Function>
<Function name='XMod' return='float, float' arguments='float value, float approach_speed'>
If the player has a XMod set, returns the value of that XMod and its associated approach speed. Returns nil otherwise.<br />
If the optional first argument is passed, sets the XMod to the value and disables any CMod or MMod that is set.<br />
If the optional second argument is passed, sets the speed at which the transition occurs.
</Function>
<Function name='Xmode' return='float, float' arguments='float value, float approach_speed'> </Function>
</Class>
<Class name='PlayerStageStats'>
<Function name='FailPlayer' return='bool' arguments=''>
@@ -3182,6 +3225,9 @@ save yourself some time, copy this for undocumented things:
<Function name='GetGrade' return='Grade' arguments=''>
Returns the player's grade.
</Function>
<Function name='GetHighScore' return='HighScore' arguments=''>
Returns the player's HighScore.
</Function>
<Function name='GetHoldNoteScores' return='int' arguments='HoldNoteScore hns'>
Returns the number of judgments for a specified HoldNoteScore.
</Function>
@@ -3580,7 +3626,7 @@ save yourself some time, copy this for undocumented things:
Return the width of the display.
</Function>
<Function name='GetFPS' return='int' arguments=''>
Return the FPS.
Return the number of frames per second.
</Function>
<Function name='GetVPF' return='int' arguments=''>
Return the VPF.
@@ -3676,6 +3722,9 @@ save yourself some time, copy this for undocumented things:
</Function>
</Class>
<Class name='RageTexture'>
<Function name='GetNumFrames' return='int' arguments=''>
Returns the number of frames in this texture.
</Function>
<Function name='GetTextureCoordRect' return='{float}' arguments=''>
Return the texture coordinate rectangle as <code>{left, top, right, bottom}</code>.
</Function>
@@ -3688,6 +3737,9 @@ save yourself some time, copy this for undocumented things:
<Function name='rate' return='void' arguments='float fRate'>
Sets the animation or movie playback rate to <code>fRate</code>.
</Function>
<Function name='Reload' return='void' arguments=''>
Reloads the texture.
</Function>
</Class>
<Class name='RollingNumbers'>
<Function name='Load' return='void' arguments='string sGroupName'>
@@ -3743,6 +3795,9 @@ save yourself some time, copy this for undocumented things:
<Function name='RemoveInputCallback' return='void' arguments='function callback'>
This removes the callback from the list.
</Function>
<Function name='SetNextScreenName' return='void' arguments='string name'>
Sets the NextScreen value to name.
</Function>
<Function name='String' theme='_fallback' return='string' arguments='string sName'>
[02 Other.lua] Gets a string from the current Screen in the current language.
</Function>
@@ -3952,6 +4007,9 @@ save yourself some time, copy this for undocumented things:
<Function name='Cancel' return='void' arguments=''>
Tells the screen to go to the previous screen.
</Function>
<Function name='IsTransitioning' return='bool' arguments=''>
Returns <code>true</code> if the screen is currently transitioning.
</Function>
<Function name='StartTransitioningScreen' return='void' arguments='string sScreenMsg'>
Tells the screen to go to play its Out transition, and then posts the ScreenMessage <code>sScreenMsg</code>. To go to the next screen, use "SM_GoToNextScreen" as the argument.
</Function>
@@ -4041,6 +4099,9 @@ save yourself some time, copy this for undocumented things:
<Function name='GetSongFilePath' return='string' arguments=''>
Returns the songfile path.
</Function>
<Function name='GetStageCost' theme='_fallback' return='int' arguments=''>
[02 Other.lua] Returns the number of stages this song costs.
</Function>
<Function name='GetStepsByStepsType' return='{Steps}' arguments='StepsType st'>
Returns a table of Steps that have StepsType <code>st</code>.
</Function>
@@ -4267,14 +4328,8 @@ save yourself some time, copy this for undocumented things:
<Description>
See the description for PlayerOptions. The functions follow the same design.
</Description>
<Function name='LifeSetting' return='LifeType' arguments='LifeType type'>
</Function>
<Function name='DrainSetting' return= 'DrainType' arguments='DrainType type'>
</Function>
<Function name='AutosyncSetting' return='AutosyncType' arguments='AutosyncType type'>
</Function>
<Function name='BatteryLives' return='int' arguments='int num'>
</Function>
<Function name='AssistClap' return='bool' arguments='bool b'>
</Function>
<Function name='AssistMetronome' return='bool' arguments='bool b'>
@@ -4578,7 +4633,7 @@ save yourself some time, copy this for undocumented things:
<Function name='GetStyleType' return='StyleType' arguments=''>
Returns the StyleType for this Style.
</Function>
<Function name='GetColumnInfo' return='{Track= int, XOffset= int, Name= string}' arguments='int column'>
<Function name='GetColumnInfo' return='{int, int, string}' arguments='int column'>
Returns a table containing the Track, XOffset, and Name of the column.
</Function>
<Function name='GetColumnDrawOrder' return='int' arguments='int column'>
@@ -4591,6 +4646,75 @@ save yourself some time, copy this for undocumented things:
Returns <code>true</code> if the Style needs to be zoomed out with two players.
</Function>
</Class>
<Class name='TapNote'>
<Function name='GetTapNoteType' return='TapNoteType' arguments=''>
Returns the <Link class='TapNoteType' /> of the Tap Note.
</Function>
<Function name='GetTapNoteSubType' return='TapNoteSubType' arguments=''>
Returns the <Link class='TapNoteSubType' /> of the Tap Note.
</Function>
<Function name='GetTapNoteSource' return='TapNoteSource' arguments=''>
Returns the <Link class='TapNoteSource' /> of the Tap Note.
</Function>
<Function name='GetTapNoteResult' return='TapNoteResult' arguments=''>
Returns the <Link class='TapNoteResult' /> of the Tap Note.
</Function>
<Function name='GetPlayerNumber' return='PlayerNumber' arguments=''>
Returns the <Link class='PlayerNumber' /> of the Tap Note. Relevant for routine steps.
</Function>
<Function name='GetAttackModifiers' return='string' arguments=''>
Returns the Attack Modifiers of the Tap Note.
</Function>
<Function name='GetAttackDuration' return='float' arguments=''>
Returns the Attack Duration of the Tap Note in seconds.
</Function>
<Function name='GetKeysoundIndex' return='int' arguments=''>
Returns the Keysound Index of the Tap Note.
</Function>
<Function name='GetHoldDuration' return='float' arguments=''>
Returns the Hold Duration of the Tap Note in beats.
</Function>
<Function name='GetHoldNoteResult' return='HoldNoteResult' arguments=''>
Returns the <Link class='HoldNoteResult' /> of the Tap Note.
</Function>
</Class>
<Class name='TapNoteResult'>
<Function name='GetTapNoteScore' return='TapNoteScore' arguments=''>
Returns the <Link class='TapNoteScore' /> of the Tap Note.
</Function>
<Function name='GetTapNoteOffset' return='float' arguments=''>
Returns the TapNotOffset of the Tap Note.
</Function>
<Function name='GetHidden' return='bool' arguments=''>
Returns true if the Tap Note was judged with a result that would stop it from drawing.
</Function>
</Class>
<Class name='HoldNoteResult'>
<Function name='GetHoldNoteScore'>
Returns the <Link class='HoldNoteScore' /> of the Hold Note.
</Function>
<Function name='GetLife' return='float' arguments=''>
Returns the life of the Hold Note.
</Function>
<Function name='GetOverlappedTime' return='float' arguments=''>
Returns the amount of time the hold has overlapped the target.
</Function>
<Function name='GetLastHeldBeat' return='float' arguments=''>
Returns the last beat the Hold Note was held.
</Function>
<Function name='GetCheckpointsHit' return='int' arguments=''>
Returns the number of checkpoints hit.
</Function>
<Function name='GetCheckpointsMissed' return='int' arguments=''>
Returns the number of checkpoints missed.
</Function>
<Function name='GetHeld' return='bool' arguments=''>
Returns true if the note was initiated and is being held.
</Function>
<Function name='GetActive' return='bool' arguments=''>
Returns true if the note was initiated.
</Function>
</Class>
<Class name='TextBanner'>
<Function name='Load' return='void' arguments='string sMetricsGroup'>
Loads the TextBanner from the specified metrics group.
@@ -4678,8 +4802,29 @@ save yourself some time, copy this for undocumented things:
<Function name='RunLuaScripts' return='void' arguments='string sMask'>
</Function>
<Function name='SetTheme' return='void' arguments='string theme'>
Changes the current theme.<br />
After the theme changes, the screen specified by the Common::AfterThemeChangeScreen metric will be loaded.<br />
The Common::InitialScreen metric will be used if Common::AfterThemeChangeScreen is blank or invalid.
</Function>
</Class>
<Class name='TimingData'>
<Description>
GetBPMsAndTimes, GetStops, GetDelays, GetLabels, GetWarps, GetCombos, GetTimeSignatures, GetTickcounts, GetFakes, GetScrolls, and GetSpeeds all have two different modes.<br />
If the metric TimingData:GetReturnsNumbers is false (the default), they return tables of strings. The strings are numbers separated by '='.<br />
If the metric TimingData:GetReturnsNumbers is true, they return tables of tables, and the inner tables contain numbers as described for each function.<br />
The first form is kept around and is the default for compatibility with older themes. The advantage of the second form is that you no longer need to have a bit of code in your theme to transform the string into a table of numbers before you can use it.<br />
Example:<br />
local bpmsand= timing_data:GetBPMsAndTimes()<br />
for i, s in ipairs(bpmsand) do<br />
local sand= split("=", s)<br />
bpmsand[i]= {tonumber(sand[1]), tonumber(sand[2])}<br />
end<br />
-- do something that looks at all the bpms and times. <br />
Becomes:<br />
local bpmsand= timing_data:GetBPMsAndTimes()<br />
-- do something that looks at all the bpms and times. <br />
</Description>
<Function name='GetActualBPM' return='{float}' arguments=''>
Returns the minimum and maximum BPM of the song in a table (in that order).
</Function>
@@ -4689,44 +4834,44 @@ save yourself some time, copy this for undocumented things:
<Function name='GetBPMAtBeat' return='float' arguments='float fBeat'>
Returns the BPM at <code>fBeat</code>.
</Function>
<Function name='GetBPMs' return='{string}' arguments=''>
Returns a table of the BPMs as strings.
<Function name='GetBPMs' return='{float}' arguments=''>
Returns a table of the BPMs as floats.
</Function>
<Function name='GetBPMsAndTimes' return='{string}' arguments=''>
Returns a table of the BPMs and the times they happen as strings with the format "<code>beat=BPM</code>".
<Function name='GetBPMsAndTimes' return='{{float, float}}' arguments=''>
Returns a table of the BPMs and the times they happen as tables. The first value is the beat. The second value is the bpm.
</Function>
<Function name='GetElapsedTimeFromBeat' return='float' arguments='float fBeat'>
Returns the elapsed time from <code>fBeat</code>.
</Function>
<Function name='GetStops' return='{string}' arguments=''>
Returns a table of the Stops and the times they happen as strings with the format "<code>beat=stop seconds</code>".
<Function name='GetStops' return='{{float, float}}' arguments=''>
Returns a table of the Stops and the times they happen as tables. The first value is the beat. The second value is the length.
</Function>
<Function name='GetDelays' return='{string}' arguments=''>
Returns a table of the Delays and the times they happen as strings with the format "<code>beat=stop seconds</code>".
<Function name='GetDelays' return='{{float, float}}' arguments=''>
Returns a table of the Delays and the times they happen as tables. The first value is the beat. The second value is the length.
</Function>
<Function name='GetLabels' return='{string}' arguments=''>
Returns a table of the Labels and the times they happen as strings with the format "<code>beat=label name</code>."
<Function name='GetLabels' return='{{float, string}}' arguments=''>
Returns a table of the Labels and the times they happen as tables. The first value is the beat. The second value is the label.
</Function>
<Function name='GetWarps' return='{string}' arguments=''>
Returns a table of the Warps and the times they happen as strings with the format "<code>beat=number of beats warped over</code>."
<Function name='GetWarps' return='{{float, float}}' arguments=''>
Returns a table of the Warps and the times they happen as tables. The first value is the beat. The second value is the number of beats to warp over.
</Function>
<Function name='GetCombos' return='{string}' arguments=''>
Returns a table of the Combos and the times they happen as strings with the format "<code>beat=combo value</code>."
<Function name='GetCombos' return='{{float, float, float}}' arguments=''>
Returns a table of the Combos and the times they happen as tables. The first value is the beat. The second value is the combo. The third value is the miss combo.
</Function>
<Function name='GetTimeSignatures' return='{string}' arguments=''>
Returns a table of the Time Signatures and the times they happen as strings with the format "<code>beat=beats per measure (numerator)=denominator</code>."
<Function name='GetTimeSignatures' return='{{float, float, float}}' arguments=''>
Returns a table of the Time Signatures and the times they happen as tables. The first value is the beat. The second value is the numerator. The third value is the denominator.
</Function>
<Function name='GetTickcounts' return='{string}' arguments=''>
Returns a table of the Tickcountss and the times they happen as strings with the format "<code>beat=number of ticks per beat</code>."
<Function name='GetTickcounts' return='{{float, float}}' arguments=''>
Returns a table of the Tickcounts and the times they happen as tables. The first value is the beat. The second value is the number of ticks per beat.
</Function>
<Function name='GetFakes' return='{string}' arguments=''>
Returns a table of the Fakes and the times they happen as strings with the format "<code>beat=number of beats to not judge</code>."
<Function name='GetFakes' return='{{float, float}}' arguments=''>
Returns a table of the Fakes and the times they happen as tables. The first value is the beat. The second value is the number of beats to not judge.
</Function>
<Function name='GetScrolls' return='{string}' arguments=''>
Returns a table of the Scrolls and the times they happen as strings with the format "<code>beat=scroll rate ratio</code>."
<Function name='GetScrolls' return='{{float, float}}' arguments=''>
Returns a table of the Scrolls and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio.
</Function>
<Function name='GetSpeeds' return='{string}' arguments=''>
Returns a table of the Speeds and the times they happen as strings with the format "<code>beat=scroll rate ratio=length of time to fully activate=unit of activation (0 for beats, 1 for seconds)</code>."
<Function name='GetSpeeds' return='{{float, float}}' arguments=''>
Returns a table of the Speeds and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio. The third value is the length of time to fully activate. The fourth value is the unit of activation (0 for beats, 1 for seconds).
</Function>
<Function name='HasBPMChanges' return='bool' arguments=''>
Returns <code>true</code> if the TimingData contains BPM changes.
@@ -4954,6 +5099,10 @@ save yourself some time, copy this for undocumented things:
<Function name='GetType' return='WheelItemDataType' arguments=''>
Returns the type of this wheel item.
</Function>
<Function name='IsLoaded' return='bool' arguments=''>
Returns whether the wheel item has been loaded yet. If this function returns false, calling any other WheelItemBase function will result in an error. <br />
A specific case where this is known to happen is commands that trigger on CurrentSongChanged because the music wheel clears the current song before it finishes loading if the current song is longer than the number of stages remaining.
</Function>
</Class>
<Class name='WorkoutGraph'>
<Function name='SetFromCurrentWorkout' return='void' arguments=''>
+1 -1
View File
@@ -1,4 +1,4 @@
Used by Pocket DDR (http://www.stepmania.com/forums/showthread.php?t=6621).
Used by Pocket DDR (http://old.stepmania.com/forums/showthread.php?t=6621).
Basically a compressed version of a .SM that includes the banner and background
in the file as well.
@@ -0,0 +1,34 @@
-- A simple ActorFrame example with a couple Actor children and attributes.
-- An ActorFrame is used to contain other actors, giving them a common origin
-- and organizing them.
Def.ActorFrame{
Name= "Simple frame",
-- Amount to multiply the delta time by when updating.
UpdateRate= 2,
-- The angular width of the field of view used to render children.
-- This will ruin your frame rate, do not use. -1 means no effect.
--FOV= -1,
-- The position of the vanishing point used for the FOV rendering.
--VanishX= _screen.cx,
--VanishY= _screen.cy,
-- Whether to apply lighting. Incomplete implementation, do not use.
--Lighting= true,
-- Different color values used when lighting is applied.
--AmbientColor= ".75,.75,.75",
--DiffuseColor= "0,0,.25",
--SpecularColor= ".25,0,0",
-- A couple children, just to have something to list later.
Def.Actor{Name= "Simple child"},
Def.Actor{Name= "Other child"},
InitCommand= function(self)
local children= self:GetChildren()
for name, child in pairs(children) do
Trace("Has child " .. name)
end
end
}
@@ -0,0 +1,62 @@
-- A simple ActorScroller example with a couple of BitmapText children.
-- ActorScrollers are used to create scrolling displays of other Actors.
Def.ActorScroller{
-- (float) Number of items to have visible at one time.
-- ScrollThroughAllItems divides this value by 2.
NumItemsToDraw=14, -- Default value is 7 if this parameter is omitted.
-- (float) The number of seconds to show each item.
SecondsPerItem=1, -- Default value is 1 if this parameter is omitted.
-- Transforms the ActorScroller's children. Usually used for scrolling.
-- The most important part of an ActorScroller.
-- This example spaces each item out 32 pixels vertically.
-- "offset" represents the offset from the center of the scroller.
TransformFunction=function(self,offset,itemIndex,numItems)
self:y(32*offset)
end,
-- (int) "1 == one evaluation per position"
-- default value is 1 if this parameter is omitted.
--Subdivisions=1,
-- (bool) A built-in mask for hiding elements. Disabled by default.
--UseMask=false,
-- (float) Set the width and height of the mask. Only used if UseMask is true.
-- Defaults for both are 0.
--MaskWidth=0,
--MaskHeight=0,
-- children (items to scroll)
-- CAVEAT: BitmapTexts have to be wrapped in ActorFrames in order to be colored.
-- This is a long standing issue (ITG? ITG2?)
Def.ActorFrame{
Def.BitmapText{
Name="ScrollItem1",
Font="Common Normal",
Text="Scroll Item 1",
InitCommand=cmd(diffuse,color("#FF0000")),
},
},
Def.ActorFrame{
Def.BitmapText{
Name="ScrollItem2",
Font="Common Normal",
Text="Scroll Item 2",
InitCommand=cmd(glow,color("#00FF0088")),
},
},
Def.BitmapText{
Name="ScrollItem3",
Font="Common Normal",
Text="Scroll Item 3",
InitCommand=cmd(bob;effectmagnitude,8,0,4),
},
-- Scroller commands
InitCommand=cmd(Center),
OnCommand=cmd(scrollwithpadding,8,8),
}
@@ -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)
@@ -0,0 +1,134 @@
-- This is the example for how to theme ScreenMapControllers, the Config
-- Key/Joy Mappings screen.
-- The contents of this file will actually be in several sections, each
-- intended to be placed in its own file.
-- Sections will be seperated by lines of dashes to make the separation clear.
-- The first line inside the dashes will have the name of the file to copy the
-- section to.
-- The rest of the area inside the dashes will discuss general aspects of the
-- section being discussed.
----------------------------------------------------------------
-- metrics.ini - the metrics you might want to set
-- See the ScreenMapControllers section of _fallback/metrics.ini
----------------------------------------------------------------
----------------------------------------------------------------
-- overlay, underlay, decorations, transitions
-- ScreenMapControllers supports the standard layers and transitions:
-- Layers: overlay, underlay, decorations
-- Transitions: in, out, cancel
-- Details of creating the layers and transitions for a screen are covered in
-- ScreenWithLayersAndTransitions.lua.
-- Previous versions of ScreenMapControllers had the warning in the overlay.
-- The warning has been moved to Graphics/ScreenMapControllers warning.lua. If
-- you have previously made a theme, update your theme to match the new
-- convention.
----------------------------------------------------------------
----------------------------------------------------------------
-- Graphics/ScreenMapControllers warning.lua
-- The warning that is displayed when entering the screen.
-- The _fallback warning uses the WarningHeader and WarningText strings from
-- en.ini. If all you want to do is change the text, add those entries to your
-- en.ini.
-- The actor returned by your lua file must handle TweenOn and TweenOff commands.
-- TweenOn will occur when the screen starts.
-- TweenOff will occur when the warning is dismissed.
-- Here is a simple actor that dims the screen and displays the text.
----------------------------------------------------------------
return Def.ActorFrame{
InitCommand=cmd(xy, SCREEN_CENTER_X, SCREEN_CENTER_Y),
Def.Quad{
TweenOnCommand=cmd(zoomto, SCREEN_WIDTH, SCREEN_HEIGHT; diffuse, Color.Black),
TweenOffCommand=cmd(linear, 0.5; diffusealpha, 0),
},
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("WarningHeader"),
TweenOnCommand=cmd(y,-80;diffuse,Color.Red),
TweenOffCommand=cmd(linear,0.5;diffusealpha,0),
},
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("WarningText"),
TweenOnCommand=cmd(y,10;wrapwidthpixels,SCREEN_WIDTH-48),
TweenOffCommand=cmd(linear,0.5;diffusealpha,0),
},
}
----------------------------------------------------------------
-- Graphics/ScreenMapControllers action.lua
-- The fallback actor that is used when there isn't a specific actor for an
-- action. At a minimum, this should display the name of the action, in order
-- to correctly handle the possibility of actions being added in the future.
-- _fallback's version accomplishes this by being a BitmapText and fetching the
-- text from en.ini.
----------------------------------------------------------------
return Def.BitmapText{
Font="Common Normal",
InitCommand= cmd(x, SCREEN_CENTER_X; zoom, .75; diffuse, color("#808080")),
OnCommand= function(self)
self:diffusealpha(0)
self:decelerate(0.5)
self:diffusealpha(1)
-- This code is in the OnCommand because the screen sets the name of this
-- actor after loading it. If this code was in the InitCommand, it would
-- not work because the name is blank at that point.
-- fancy effect: Look at the name (which is set by the screen) to set text
-- The name is concatenated with "Action" so that the strings used will be
-- unique, next to each other in the language file, and clear in usage.
self:settext(
THEME:GetString("ScreenMapControllers", "Action" .. self:GetName()))
end,
OffCommand=cmd(stoptweening;accelerate,0.3;diffusealpha,0;queuecommand,"Hide"),
HideCommand=cmd(visible,false),
GainFocusCommand=cmd(diffuseshift;effectcolor2,color("#808080");effectcolor1,color("#FFFFFF")),
LoseFocusCommand=cmd(stopeffect),
}
----------------------------------------------------------------
-- Graphics/ScreenMapControllers <action name>.lua
-- Every action can have its own special actor which will be used if it exists.
-- Replace "<action name>" with the lowercase name of the action you are making
-- an actor for and create the actor you want for that action.
-- As of this writing, action names are:
-- "clear", "reload", "save", "setlist", "exit"
-- Creating actors is discussed in Examples/anatomy_of_an_actor.lua, so an
-- example is not provided here.
----------------------------------------------------------------
----------------------------------------------------------------
-- Graphics/ScreenMapControllers nosetlistprompt.lua
-- This is the actor that is displayed when the player attempts to use the
-- SetList (or "Assign List") action without anything in the list.
-- It should tell the player that the list is empty and how to add things to
-- the list.
-- It must handle TweenOn and TweenOff commands.
-- TweenOn occurs when the player tries to perform the action and fails.
-- TweenOff occurs when the prompt is dismissed.
-- _fallback's does this by dimming the screen with a quad and using a
-- BitmapText to display the string from the language file.
-- Note the use of stoptweening in TweenOn and TweenOff. This is to prevent
-- the player from overflowing the tween stack by mashing.
----------------------------------------------------------------
return Def.ActorFrame{
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y),
Def.Quad{
InitCommand=cmd(zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color.Black;diffusealpha,0),
TweenOnCommand=cmd(stoptweening;diffusealpha,1;linear,0.5;diffusealpha,0.8),
TweenOffCommand=cmd(stoptweening;linear,0.5;diffusealpha,0),
},
Def.ActorFrame{
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("NoSetListPrompt"),
InitCommand=cmd(y,10;wrapwidthpixels,SCREEN_WIDTH-48;diffusealpha,0),
TweenOnCommand=cmd(stoptweening;diffusealpha,0;sleep,0.5125;linear,0.125;diffusealpha,1),
TweenOffCommand=cmd(stoptweening;linear,0.5;diffusealpha,0),
},
},
}
@@ -0,0 +1,57 @@
-- This screen file returns an ActorFrame with two actors.
-- A screen file must return an ActorFrame.
-- All actors on the screen must be inside this ActorFrame.
return Def.ActorFrame{
-- An actor is added to a frame by calling a function that returns an actor.
-- Most of the functions for creating actors are in the Def table.
-- All of the functions in the Def table take a table with the parameters
-- to construct the actor.
-- For convenience, Lua makes the parentheses normally used when calling a
-- function optional when that function's sole argument is a table.
-- "foo({...})" and "foo{...}" are equivalent in lua.
-- Quad is a very simple actor, a colored rectangle.
Def.Quad{
-- The parameters for an actor are set through entries in a table.
-- This is just a simple example, so it only sets the required parts.
-- Every actor should have a name.
-- The name can be used to find the actor later.
-- If you don't set the name, the actor will have a blank name.
-- The name should be unique within the ActorFrame the actor is inside.
-- See the entries for ActorFrame:GetChild and ActorFrame:GetChildren in
-- Lua.xml for details on what happens when two actors in the same
-- ActorFrame have the same name.
-- Actors that are inside different ActorFrames can have the same name
-- without causing any problems.
Name= "example",
-- The InitCommand for an actor should initialize any parts of the actor
-- that should be set before the first time it draws.
-- If you don't set the InitCommand, the actor will be in its default
-- state. Details of the default state of an actor can be found in the
-- example for that actor.
InitCommand= function(self)
-- The details of these functions can be found in Lua.xml.
-- Position, size, and color should be initialized for a quad.
self:xy(SCREEN_CENTER_X, SCREEN_CENTER_Y)
self:setsize(20, 20)
self:diffuse(color("1,1,1,1"))
end,
},
-- The contents of an ActorFrame are entries in a table, so we separate
-- them with commas.
Def.Quad{
-- This quad is almost identical to the previous one, so there is nothing
-- new here to explain.
Name= "example2",
InitCommand= function(self)
self:xy(SCREEN_CENTER_X, SCREEN_CENTER_Y-40)
self:setsize(20, 20)
self:diffuse(color("0,0,1,1"))
end,
},
}
@@ -0,0 +1,4 @@
# This file gives a bit of basic information about the theme.
[ThemeInfo]
DisplayName=One Screen Example Theme
Author=Kyzentun
@@ -0,0 +1,19 @@
# This metrics.ini declares a single screen and makes it the first (and only) screen in the theme.
# Metrics are organized into groups.
# The next line is a group name. All the lines after it until the next group name will set metrics in this group.
[Common]
# The Common group is used for setting common metrics. See _fallback/metrics.ini for a list of all things that can be set in the Common group.
# Since this is a simple example, it only sets the initial screen.
InitialScreen="ScreenSimpleExample"
# Every screen in a theme must have a group declared for it.
[ScreenSimpleExample]
# Since ScreenSimpleExample does not exist in _fallback, the fallback group and class for it must be specified.
# ScreenWithMenuElements is the simplest screen you will want to use, it has practically nothing on it.
Class="ScreenWithMenuElements"
# Setting the Fallback metric for a group means that whenever a metric is not found in the group, the group named by the Fallback metric will be searched.
# This means that everything set in the ScreenWithMenuElements group is also set in the ScreenSimpleExample group.
Fallback="ScreenWithMenuElements"
# That's all. Other metrics could be set, but this is a minimal example.
@@ -0,0 +1,11 @@
This is the "One Screen Example Theme".
It's a very minimal theme with a single screen showing two rectangles and the decorations that ScreenWithMenuElements has built in by default.
You can try it out by copying it into the Themes folder.
Since this theme only has one screen, and no code to handle transitions or a normal method of accessing the options, in order to change to another theme you'll have to access the options menu by pressing the service key, which is mapped to Scroll Lock by default.
Parts of this theme:
metrics.ini
ThemeInfo.ini
BGAnimations/ScreenSimpleExample overlay.lua
@@ -18,13 +18,18 @@
-- The function "FooMods" returns a table containing all the information the
-- option row handler needs to build the option row.
function FooMods()
return {
return {
-- A string with the name of the row. This name will be localized using
-- the entry in the "OptionTitles" section of the language file.
Name= "Foo",
Name= "Foo",
-- A boolean that controls whether this row goes to the "next row"
-- element when NavigationMode for the screen is "toggle" and the
-- ArcadeOptionsNavigation preference is 1.
GoToFirstOnStart= false,
-- A boolean controlling whether the choice affects all players.
OneChoiceForAllPlayers= false,
OneChoiceForAllPlayers= false,
-- A boolean controlling whether SaveSelections is called after every
-- change. If this is true, SaveSelections will be called every time
@@ -35,12 +40,12 @@ function FooMods()
-- "ShowOneInRow" shows only the choice with focus is shown.
-- "ShowOneInRow" is forced if there are enough choices that they would go
-- off screen.
LayoutType= "ShowAllInRow",
LayoutType= "ShowAllInRow",
-- A SelectType enum value. "SelectOne" allows only one choice to be
-- selected. "SelectMultiple" allows multiple to be selected.
-- "SelectNone" allows none to be selected.
SelectType= "SelectMultiple",
SelectType= "SelectMultiple",
-- Optional function. If non-nil, this function must return a table of
-- PlayerNumbers that are allowed to use the row.
@@ -56,7 +61,7 @@ function FooMods()
-- A table of strings that are the names of choices. Choice names are not
-- localized.
Choices= {"a", "b", "c", "d"},
Choices= {"a", "b", "c", "d"},
-- Optional table. If non-nil, this table must contain a list of messages
-- this row should listen for. If one of the messages is recieved, the
@@ -68,31 +73,31 @@ function FooMods()
-- on the row the player has selected.
-- self is the table returned by the original function used to create the
-- option row. (the table being created right now).
-- list is a table of bools, all initially false. Set them to true to
-- list is a table of bools, all initially false. Set them to true to
-- indicate which options are on.
-- pn is the PlayerNumber of the player the selections are for.
LoadSelections= function(self, list, pn)
LoadSelections= function(self, list, pn)
Trace("FooMods:LoadSelections(" .. pn .. ")")
for i, choice in ipairs(self.Choices) do
for i, choice in ipairs(self.Choices) do
-- Randomly set some to true just for an example.
if math.random(0, 1) == 1 then
Trace(choice .. " (" .. i .. ")" .. " set to true.")
list[i]= true
end
end
end,
end
end,
-- SaveSelections should examine the list of what the player has selected
-- and apply the appropriate modifiers to the player.
-- Same args as LoadSelections.
SaveSelections= function(self, list, pn)
SaveSelections= function(self, list, pn)
Trace("FooMods:SaveSelections(" .. pn .. ")")
for i, choice in ipairs(self.Choices) do
if list[i] then
for i, choice in ipairs(self.Choices) do
if list[i] then
Trace(choice .. " (" .. i .. ")" .. " set to true.")
end
end
end,
end
end,
-- Optional function. If non-nil, this function must take 3 parameters
-- (self, pn, choice), and return a bool. It is called when a player
@@ -137,5 +142,5 @@ function FooMods()
end
return change >= 2
end
}
}
end
@@ -0,0 +1,74 @@
-- How actor creation works:
-- Actors are created from tables.
-- The elements in the table are used to set various attributes of the actor
-- or commands that the actor can execute.
-- Unless stated otherwise, assume that all elements are optional, few
-- attributes or commands are required.
-- Different Actor types have different attributes that can be set.
-- Any element with a name that ends in "Command" must be a function and can
-- later be executed by using the playcommand or queuecommand functions on
-- that actor.
-- Any element with a name that ends in "MessageCommand" must be a function
-- and will be executed whenever that message is broadcast.
-- The functions used for commands and messages are automatically passed a
-- "self" parameter, which is the actor. Message functions are also passed
-- a params table containing parameters that were broadcast with the
-- message. playcommand can be used to pass a parameters table to the
-- command, but queuecommand cannot.
-- For ActorFrame and actors that inherit from it, array elements of the
-- table are added as children.
-- Any element in the table that is not recognized as an attribute, command,
-- or child is discarded.
-- Some actors also fetch metrics from metrics.ini to control some aspect.
-- Metrics loaded will be listed in entries for individual actor types.
-- There are some helper functions like LoadActor and LoadFont, which are
-- documented in Docs/Luadoc/lua.xml.
-- This is a simple actor with no visual aspect and basic commands.
Def.Actor{
-- Attributes:
-- You should always supply a name for an actor. The name is used when
-- finding the actor with GetChild.
Name= "simple",
-- The base rotation and zoom. X, Y, and Z are all settable, though only
-- X is listed in this example. Rotation is in degrees.
BaseRotationX= 15,
BaseZoomX= .5,
-- The Init command is run for every actor after all the attributes are set
-- and all children have been loaded.
-- It's important to note that the Init command runs during screen
-- creation, before the screen has changed. If you use
-- SCREENMAN:GetTopScreen() in the Init command, you will not get the
-- screen that is being created because it isn't finished being created.
InitCommand= function(self)
Trace("Init command running for " .. self:GetName())
end,
-- The On command runs after screen creation has finished.
OnCommand= function(self)
Trace("On command running for " .. self:GetName())
-- Queue the Exa command to execute when all tweening has finished.
self:queuecommand("Exa")
end,
ExaCommand= function(self)
Trace("Exa command running for " .. self:GetName())
-- Execute the Tera command right now.
self:playcommand("Tera", {foo= 1, bar= 2})
end,
TeraCommand= function(self, params)
Trace("Tera command running for " .. self:GetName() .. ": " .. params.foo .. ", " .. params.bar)
-- Broadcast a message that will execute the Giga command for every actor
-- that has it.
MESSAGEMAN:Broadcast("Giga", {foo= 1, bar= 2})
end,
GigaMessageCommand= function(self, params)
Trace("Giga command running for " .. self:GetName() .. ": " .. params.foo .. ", " .. params.bar)
end
}
-- It is important to note that the things in Def are functions and you are
-- passing them a table when you use them. "Def.Actor{}", "Def.Actor({})",
-- and "local foo= {} Def.Actor(foo)" are all equivalent in effect, but
-- some forms make is easier to write well organized code.
+15
View File
@@ -1,5 +1,20 @@
-- how to connect to a server with the new ScreenTextEntry Lua bindings
-- (this is the base code; I'll come up with a full tutorial later.)
-- possible text entry settings:
local teSettings = {
SendOnPop = "", -- ScreenMessage to send on pop (optional, "SM_None" if omitted)
Question = "", -- The question to display
InitialAnswer = "", -- Initial answer text
MaxInputLength = 0, -- Maximum amount of characters
Password = false, -- Mask character input (optional)
Validate = nil, -- Validation function; function(answer, errorOut), must return boolean, string.
OnOK = nil, -- On OK; function(answer)
OnCancel = nil, -- On Cancel; function()
ValidateAppend = nil, -- Validate appending a character; function(answer,append), must return boolean
FormatAnswerForDisplay = nil -- Format answer for display; function(answer), must return string
};
SCREENMAN:AddNewScreenToTop("ScreenTextEntry");
local serverSettings = {
Question = "Connect to server:",
+3 -2
View File
@@ -1,5 +1,5 @@
[sm-ssc v1.0 public beta 2 | last update 2010/apr 11]
This is a list of all the known Actor classes in sm-ssc. You can use these by
[SM5 public nightly build | last update 2014/aug 04]
This is a list of all the known Actor classes in SM5. You can use these by
prefixing "Def." on the end of the name (e.g. Def.PaneDisplay).
Actor
@@ -9,6 +9,7 @@ ActorMultiTexture
ActorMultiVertex
ActorProxy
ActorScroller
ActorSound
Banner
BGAnimation
BitmapText
+3 -15
View File
@@ -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.
+1 -1
View File
@@ -1,4 +1,4 @@
SM4 Font .ini values
StepMania 5 Font .ini values
[common]
CapitalsOnly - If set to 1, lowercase letters are drawn with uppercase letters instead.
+9 -31
View File
@@ -1,34 +1,12 @@
Recommended Practices when theming for sm-ssc
---------------------------------------------
1) Use the --theme= command line parameter to switch between themes quickly.
Recommended Practices when theming for StepMania
------------------------------------------------
1) Use the --theme= command line parameter to load StepMania with a specific theme.
This way, you don't have to deal with the theme switch and all the possible
nonsense errors that might come up (due to you having a different amount of
song group colors, timer warning states, etc.), and you can quickly switch
themes if you work on many of them at once.
2) If you want to create a theme that targets both regular StepMania 4 and
sm-ssc, there are a few precautions to take care of.
2a) First, decide if you want to develop it on sm-ssc first or SM4 first. It is
usually easier to deal with making the theme in normal SM4 and using _portKit-SM4
to get the theme running up in sm-ssc.
If you do decide to make the theme for sm-ssc first, be prepared to fill in a lot
of files that sm-ssc _fallback makes empty for you, as the metrics, graphics, and
BGAnimations from SM4's default theme will be loaded instead of sm-ssc's _fallback.
2b) sm-ssc's _fallback theme defines a variable, SSC, like so:
[code]SSC = (ProductID() == "sm-ssc");[/code]
This will return true if it's sm-ssc, or false if it's SM4.
You should define this in a script (00 themeInfo.lua is a good place), so that
SM4 will be able to recognize it.
With this "SSC guard" in place, you can now wrap things in "if SSC then"
statements if they won't work on SM4. You can also provide alternatives if the
player isn't using sm-ssc, since sometimes SM4 will have an approximation or
alternate way to get the data.
3) When dealing with frame size errors or theme code errors, don't just hide the
2) When dealing with frame size errors or theme code errors, don't just hide the
dialog and pretend they don't exist. Good themers fix these problems instead of
releasing the theme and saying "oh, just play it in fullscreen mode".
@@ -36,15 +14,15 @@ If you have hidden the error dialogs, you'll need to modify Preferences.ini.
Find the IgnoredDialogs= line and remove everything after the = sign. You will
now recieve the error messages in windowed mode again.
4) While this is a SSC-specific practice, having a themeInfo file set up in
your theme's Scripts directory is a good way to store information about the
theme (e.g. version number, date, product code, etc.)
3) While this is not required, having a themeInfo file set up in your theme's
Scripts directory is a good way to store information about the theme (e.g.
version number, date, product code, etc.)
An example of a themeInfo script:
[code]
themeInfo = {
Name = "your theme's name",
Name = "Theme Name",
Version = "v1.0", -- typically a float or string. floats are easier to compare.
Date = "20100426 1115",
Date = "20140914 1902",
};
[/code]
+250 -41
View File
@@ -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.
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.
-20
View File
@@ -1,20 +0,0 @@
[Redistributables]
You may have to download the Visual C++ Redistritable Packages in order to
run the game. The link is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=30679
[Using Google Chrome?]
If you are using Google Chrome as your primary web browser, you will have to perform some extra steps to get stepmania:// URI handling to work:
Find your user data
Windows XP: C:\Documents and Settings\<USERNAME>\Local Settings\Application Data\Google\Chrome\User Data
Windows Vista/7: C:\Users\<USERNAME>\AppData\Local\Google\Chrome\User Data
Add your protocol to the 'Local State' file under the 'protocol_handler' section, as such:
"protocol_handler": {
"excluded_schemes": {
...
"stepmania": false,
...
}
+1 -1
View File
@@ -89,7 +89,7 @@ Macgravel
hanubeki (@803832, formerly sy567)
* Small beginner helper fix
(http://www.stepmania.com/forums/showpost.php?p=158721&postcount=12)
(http://old.stepmania.com/forums/showpost.php?p=158721&postcount=12)
* Lots of code changes from hanubeki-modified-sm-ssc:
http://code.google.com/r/hanubeki-modified-sm-ssc/
+1 -1
View File
@@ -1 +1 @@
lots of license documentation for something sm-ssc uses? it goes in here.
lots of license documentation for something StepMania uses? it goes in here.
+5 -5
View File
@@ -90,7 +90,7 @@ r111 | 20091122 10:21:30
------------------------
* [ArchHooks_Unix] Follow user's system language as default.
[David Santamaría Rogado (howl)]
See http://www.stepmania.com/forums/showthread.php?t=21471 for more info.
See http://old.stepmania.com/forums/showthread.php?t=21471 for more info.
r110 | 20091120 14:03:17
------------------------
@@ -119,7 +119,7 @@ r106 | 20091115 21:33:28
------------------------
* Prevent focus lost at Fullscreen on X11, fix windowed->fullscreen resolution
changes so that they save [David Santamaría Rogado (howl)]
(http://www.stepmania.com/forums/showthread.php?t=21430)
(http://old.stepmania.com/forums/showthread.php?t=21430)
r105 | 20091114 15:07:58
------------------------
@@ -153,7 +153,7 @@ r102 | 20091111 04:00:46
r101 | 20091109 19:33:55
------------------------
* Implemented David Santamaría Rogado (howl)'s patch for loading Splash.png instead of an .xpm
(http://www.stepmania.com/forums/showpost.php?p=157340&postcount=3)
(http://old.stepmania.com/forums/showpost.php?p=157340&postcount=3)
r089-100 | 20091103 01:45:01 - 20091109 04:01:31
------------------------------------------------
@@ -176,7 +176,7 @@ Okay let's just say it's r089 to r100 and call it a week.
* r28221: "allow overriding, like PRODUCT_ID" [Glenn Maynard]
* r28222-28223: "adding support for pms files" [GRIM657]
* The pulseaudio patch [David Santamaría Rogado (howl), OndÅ™ej HoÅ¡ek, Damien Thébault]
(see http://www.stepmania.com/forums/showthread.php?t=21348)
(see http://old.stepmania.com/forums/showthread.php?t=21348)
* Greg Nadja's OpenGL/Windows patch
* sm-ssc Changes:
@@ -784,7 +784,7 @@ r1136 | 20091115 20:43:48
[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp]
-------------------------
howl did it
http://www.stepmania.com/forums/showthread.php?p=157603#post157603
http://old.stepmania.com/forums/showthread.php?p=157603#post157603
r1137 | 20091115 21:05:36
[Modified /sm-ssc3/src/arch/LowLevelWindow/LowLevelWindowX11.cpp]
+8 -7
View File
@@ -6,7 +6,8 @@ ACLOCAL_AMFLAGS = -I autoconf/m4
## Black magic (read: sed) for getting the product ID as defined in code, not by the autotools.
## Quotes are making vim's highlighting of this even worse, so just escape everything,
## including the escapes. Make it lowercase to match ArchHooks::MountInitialFileSystems().
productID := $(shell sed -nr /define\\s+PRODUCT_ID_BARE/\{s/.*define\\s+PRODUCT_ID_BARE\\s+\(.+\)/\\1/\;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/\;p\;q\} $(srcdir)/src/ProductInfo.h)
## Replace space with - so package build tools won't choke on the installation directory.
productID := $(shell sed -nr /define\\s+PRODUCT_ID_BARE/\{s/.*define\\s+PRODUCT_ID_BARE\\s+\(.+\)/\\1/\;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ\ /abcdefghijklmnopqrstuvwxyz-/\;p\;q\} $(srcdir)/src/ProductInfo.h)
installFiles = src/stepmania
if HAVE_GTK
@@ -26,14 +27,14 @@ dist-hook: SMData
cp -r -t "$(distdir)" $(installFiles)
install-exec-hook:
mkdir -p "$(prefix)/$(productID)"
$(INSTALL) $(installFiles) "$(prefix)/$(productID)"
mkdir -p "$(DESTDIR)$(prefix)/$(productID)"
$(INSTALL) $(installFiles) "$(DESTDIR)$(prefix)/$(productID)"
install-data-local:
cp -r -t "$(prefix)/$(productID)" $(installData)
mkdir -p "$(prefix)/$(productID)/Songs"
mkdir -p "$(DESTDIR)$(prefix)/$(productID)/Songs"
cp -r -t "$(DESTDIR)$(prefix)/$(productID)" $(installData)
uninstall-hook:
rm -f "$(prefix)/$(productID)/stepmania"
rm -f "$(prefix)/$(productID)/GtkModule.so"
rm -f "$(DESTDIR)$(prefix)/$(productID)/stepmania"
rm -f "$(DESTDIR)$(prefix)/$(productID)/GtkModule.so"
# todo: properly remove data
Binary file not shown.
+2
View File
@@ -3,6 +3,8 @@ StepMania
Advanced cross-platform rhythm game for home and arcade use.
[![Build Status](https://travis-ci.org/stepmania/stepmania.svg?branch=master)](https://travis-ci.org/stepmania/stepmania)
Source is all MIT Licensed, songs are CC-NC, builds with MAD or GPL-licensed FFMPEG codecs are GPL.
* Website: http://www.stepmania.com/
+1 -1
View File
@@ -2,4 +2,4 @@
Scoring={}
setmetatable(Scoring,{__index=function() return function() Warn("Lua scoring unimplemented") end end})
setmetatable(Scoring,{__index=function() return function() lua.ReportScriptError("Lua scoring unimplemented") end end})
@@ -1,153 +1,49 @@
local function Fooled()
local phrases = {
"hornswaggled",
"bamboozled",
"hoodwinked",
"swindled",
"duped",
"hoaxed",
"fleeced",
"shafted",
"caboodled",
"beguiled",
"finagled",
"two-timed",
"suckered",
"flimflammed"
}
return phrases[math.random(#phrases)]
end
-- To add a section to the credits, use the following:
-- local theme_credits= {
-- name= "Theme Credits", -- the name of your section
-- "Me", -- The people you want to list in your section.
-- "Myself",
-- "My other self",
-- {logo= "pro_dude", name= "Pro self"}, -- Someone who has a logo image.
-- -- This logo image would be "Graphics/CreditsLogo pro_dude.png".
-- }
-- StepManiaCredits.AddSection(theme_credits)
--
-- If you want to add your section after an existing section, use the following:
-- StepManiaCredits.AddSection(theme_credits, 7)
--
-- Or position can be the name of a section to insert after:
-- StepManiaCredits.AddSection(theme_credits, "Special Thanks")
--
-- Or if you want to add your section before a section:
-- StepManiaCredits.AddSection(theme_credits, "Special Thanks", true)
local ssc = {
"AJ Kelly as freem",
"Jonathan Payne (Midiman)",
"Colby Klein (shakesoda)",
}
local sm_ssc = {
"Jason Felds (wolfman2000)", -- Timing Segments, Split Timing, optimization
"Thai Pangsakulyanont (theDtTvB)", -- BMS, Split Timing, optimization
"Alberto Ramos (Daisuke Master)",
"Jack Walstrom (FSX)",
}
local stepmania = {
"Chris Danford",
"Glenn Maynard",
"Steve Checkoway",
-- and various other contributors
}
local oitg = {
"infamouspat",
"Mark Cannon (vyhd)",
}
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays and much more. StepMania AMX creator
"A.C/@waiei", -- custom scoring fixes + Hybrid scoring
"cerbo", -- lua bindings and other fun stuff
"cesarmades", -- pump/cmd* noteskins
"Chris Eldridge (kurisu)", -- dance-threepanel stepstype support
"Christophe Goulet-LeBlanc (Kommisar)", -- songs
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
"gholms", -- automake 1.11 support
"juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods
"Kaox", -- pump/default noteskin
"NitroX72", -- pump/frame noteskin
"Petriform", -- default theme music
"桜為小鳩/Sakurana-Kobato (@sakuraponila)", -- custom scoring fixes
"Samuel Kim (1a2a3a2a1a)", -- various beat mode fixes
"hanubeki (@803832)", -- beginner helper fix, among various other things
"v1toko", -- x-mode from StepNXA
"Alfred Sorenson", -- new lua bindings
}
local translators = {
"John Reactor (Polish)",
"DHalens (Spanish)",
"@Niler_jp (Japanese)",
"Deamon007 (Dutch)"
}
local thanks = {
"A Pseudonymous Coder", -- support
"Bill Shillito (DM Ashura)", -- Music (not yet though)
"cpubasic13", -- testing (a lot)
"Dreamwoods",
"Jason Bolt (LightningXCE)",
"Jousway", -- Noteskins
"Luizsan", -- creator of Delta theme
"Matt1360", -- Automake magic + oitg bro
"Renard",
"Ryan McKanna (Plaguefox)",
"Sta Kousin", --help with Japanese bug reports
}
local shoutout = {
"The Lua team", -- lua project lead or some shit. super nerdy but oh hell.
"Mojang AB", -- minecraft forever -freem
"Wolfire Games", -- piles of inspiration
"NAKET Coder",
"Ciera Boyd", -- you bet your ass I'm putting my girlfriend in the credits
--Image(), -- we should have some logos probably to look super pro
"#KBO",
"Celestia Radio", -- LOVE AND TOLERANCE
"You showed us... your ultimate dance",
}
local copyright = {
"StepMania is released under the terms of the MIT license.",
"If you paid for the program you've been " .. Fooled() .. ".",
"All content is the sole property of their respectful owners."
}
local sections = {
{ "the spinal shark collective (project lead)", ssc },
{ "sm-ssc Team", sm_ssc },
{ "StepMania Team", stepmania },
{ "OpenITG Team", oitg },
{ "Translators", translators },
{ "Other Contributors", contrib },
{ "Special Thanks", thanks },
{ "Shoutouts", shoutout },
{ "Copyright", copyright },
}
-- To add people or sections modify the above.
-- StepManiaCredits is defined in _fallback/Scripts/04 CreditsHelpers.lua.
local lineOn = cmd(zoom,0.875;strokecolor,color("#444444");shadowcolor,color("#444444");shadowlength,3)
local sectionOn = cmd(diffuse,color("#88DDFF");strokecolor,color("#446688");shadowcolor,color("#446688");shadowlength,3)
local item_padding_start = 4;
local line_height= 30
-- Tell the credits table the line height so it can use it for logo sizing.
StepManiaCredits.SetLineHeight(line_height)
local creditScroller = Def.ActorScroller {
SecondsPerItem = 0.5;
NumItemsToDraw = 40;
TransformFunction = function( self, offset, itemIndex, numItems)
self:y(30*offset)
self:y(line_height*offset)
end;
OnCommand = cmd(scrollwithpadding,item_padding_start,15);
}
local function AddLine( text, command )
local text = Def.ActorFrame{
LoadFont("Common normal")..{
Text = text or "";
OnCommand = command or lineOn;
}
}
table.insert( creditScroller, text )
end
-- Add sections with padding.
for section in ivalues(sections) do
AddLine( section[1], sectionOn )
for name in ivalues(section[2]) do
AddLine( name )
for section in ivalues(StepManiaCredits.Get()) do
StepManiaCredits.AddLineToScroller(creditScroller, section.name, sectionOn)
for name in ivalues(section) do
StepManiaCredits.AddLineToScroller(creditScroller, name)
end
AddLine()
AddLine()
StepManiaCredits.AddLineToScroller(creditScroller)
StepManiaCredits.AddLineToScroller(creditScroller)
end
creditScroller.BeginCommand=function(self)
@@ -158,4 +54,4 @@ return Def.ActorFrame{
creditScroller..{
InitCommand=cmd(CenterX;y,SCREEN_BOTTOM-64),
}
};
};
@@ -24,18 +24,18 @@ t[#t+1] = Def.ActorFrame {
LoadFont("Common Normal") .. {
Text=ProductID();
InitCommand=cmd(y,-20;zoom,0.75);
OnCommand=cmd(diffuse,color("0,0,0,1");strokecolor,color("#f7941d"));
OnCommand=cmd(diffuse,color("0,0,0,1"));
};
LoadFont("Common Normal") .. {
Text=THEME:GetThemeDisplayName();
OnCommand=cmd(diffuse,color("0,0,0,1");strokecolor,color("#f7941d"));
OnCommand=cmd(diffuse,color("0,0,0,1"));
};
LoadFont("Common Normal") .. {
Text="Created by " .. THEME:GetThemeAuthor();
InitCommand=cmd(y,24;zoom,0.75);
OnCommand=cmd(diffuse,color("0,0,0,1");strokecolor,color("#f7941d"));
OnCommand=cmd(diffuse,color("0,0,0,1"));
};
};
};
return t
return t
@@ -1,27 +0,0 @@
local waitTime = 7.5
local t = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y);
OnCommand=cmd(queuecommand,"TweenOn";sleep,waitTime;queuecommand,"TweenOff");
}
t[#t+1] = Def.Quad {
InitCommand=cmd(zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color.Black);
TweenOnCommand=cmd(diffusealpha,1;linear,0.5;diffusealpha,0.8);
TweenOffCommand=cmd(linear,0.5;diffusealpha,0);
};
t[#t+1] = Def.ActorFrame {
LoadFont("Common Normal") .. {
Text=ScreenString("WarningHeader");
InitCommand=cmd(y,-70;diffuse,Color.Red);
TweenOnCommand=cmd(diffusealpha,0;zoomx,2;zoomy,0;sleep,0.5;smooth,0.25;zoom,1;diffusealpha,1);
TweenOffCommand=cmd(linear,0.5;diffusealpha,0);
};
LoadFont("Common Normal") .. {
Text=ScreenString("WarningText");
InitCommand=cmd(y,10;wrapwidthpixels,SCREEN_WIDTH-48);
TweenOnCommand=cmd(diffusealpha,0;sleep,0.5125;linear,0.125;diffusealpha,1);
TweenOffCommand=cmd(linear,0.5;diffusealpha,0);
};
};
return t
@@ -26,13 +26,13 @@ t[#t+1] = Def.ActorFrame {
--
t[#t+1] = Def.Actor {
MenuTimerExpiredMessageCommand = function(self, param)
for pn in ivalues(Players) do
for pn in ivalues(PlayerNumber) do
SCREENMAN:GetTopScreen():Finish(pn);
end
end;
CodeMessageCommand=function(self,param)
if param.Name == "Enter" then
SCREENMAN:GetTopScreen():Finish(pn);
SCREENMAN:GetTopScreen():Finish(param.PlayerNumber);
end
end
};
@@ -0,0 +1,366 @@
-- Pester Kyzentun for an explanation if you need to customize this screen.
-- Also, this might be rewritten to us a proper customizable lua menu system
-- in the future.
-- Copy this file into your theme, then modify as needed to suit your theme.
-- Each of the things on this list has a comment marking it, so you can
-- quickly find it by searching.
-- Things you will want to change:
-- 1. The Numpad
-- 2. The Cursor
-- 3. The Menu Items
-- 4. The Menu Values
-- 4.1 The L/R indicators
-- 5. The Menu Fader
local profile= GAMESTATE:GetEditLocalProfile()
-- 1. The Numpad
-- This is what sets up how the numpad looks. See Scripts/04 NumPadEntry.lua
-- for a full description of how to customize a NumPad.
-- Note that if you provide a custom prompt actor for the NumPad, it must
-- have a SetCommand because the NumPad is used any time the player needs to
-- enter a number, and the prompt is updated by running its SetCommand.
local number_entry= new_numpad_entry{
Name= "number_entry",
InitCommand= cmd(diffusealpha, 0; xy, _screen.cx*1.5, _screen.cy),
value_color= PlayerColor(PLAYER_1),
cursor_draw= "first",
cursor_color= PlayerDarkColor(PLAYER_1),
}
local function calc_list_pos(value, list)
for i, entry in ipairs(list) do
if entry.setting == value then
return i
end
end
return 1
end
local function item_value_to_text(item, value)
if item.item_type == "bool" then
if value then
value= THEME:GetString("ScreenOptionsCustomizeProfile", item.true_text)
else
value= THEME:GetString("ScreenOptionsCustomizeProfile", item.false_text)
end
elseif item.item_type == "list" then
local pos= calc_list_pos(value, item.list)
return item.list[pos].display_name
end
return value
end
local char_list= {}
do
local all_chars= CHARMAN:GetAllCharacters()
for i, char in ipairs(char_list) do
char_list[#char_list+1]= {
setting= char:GetCharacterID(), display_name= char:GetDisplayName()}
end
end
local menu_items= {
{name= "weight", get= "GetWeightPounds", set= "SetWeightPounds",
item_type= "number", auto_done= 100},
{name= "voomax", get= "GetVoomax", set= "SetVoomax", item_type= "number",
auto_done= 10},
{name= "birth_year", get= "GetBirthYear", set= "SetBirthYear",
item_type= "number", auto_done= 1000},
{name= "calorie_calc", get= "GetIgnoreStepCountCalories",
set= "SetIgnoreStepCountCalories", item_type= "bool",
true_text= "use_heart", false_text= "use_steps"},
{name= "gender", get= "GetIsMale", set= "SetIsMale", item_type= "bool",
true_text= "male", false_text= "female"},
}
if #char_list > 0 then
menu_items[#menu_items+1]= {
name= "character", get= "GetCharacter", set= "SetCharacter",
item_type= "list", list= char_list}
end
menu_items[#menu_items+1]= {name= "exit", item_type= "exit"}
local menu_cursor
local menu_pos= 1
local menu_start= 72
local menu_x= 32
local value_x= 300
local fader
local cursor_on_menu= "main"
local menu_item_actors= {}
local menu_values= {}
local list_pos= 0
local active_list= {}
local left_showing= false
local right_showing= false
local function fade_actor_to(actor, alf)
actor:stoptweening()
actor:linear(.2)
actor:diffusealpha(alf)
end
local function update_menu_cursor()
local item= menu_item_actors[menu_pos]
menu_cursor:playcommand("Move", {item:GetX(), item:GetY()})
menu_cursor:playcommand("Fit", item)
end
local function update_list_cursor()
local valactor= menu_values[menu_pos]
valactor:playcommand("Set", {active_list[list_pos].display_name})
if list_pos > 1 then
if not left_showing then
valactor:playcommand("ShowLeft")
left_showing= true
end
else
if left_showing then
valactor:playcommand("HideLeft")
left_showing= false
end
end
if list_pos < #active_list then
if not right_showing then
valactor:playcommand("ShowRight")
right_showing= true
end
else
if right_showing then
valactor:playcommand("HideRight")
right_showing= false
end
end
end
local function input(event)
local pn= event.PlayerNumber
if not pn then return false end
if event.type == "InputEventType_Release" then return false end
local button= event.GameButton
if cursor_on_menu == "main" then
if button == "Start" then
local item= menu_items[menu_pos]
if item.item_type == "bool" then
local value= not profile[item.get](profile)
menu_values[menu_pos]:playcommand(
"Set", {item_value_to_text(item, value)})
profile[item.set](profile, value)
elseif item.item_type == "number" then
fade_actor_to(fader, .8)
fade_actor_to(number_entry.container, 1)
number_entry.value= profile[item.get](profile)
number_entry.value_actor:playcommand("Set", {number_entry.value})
number_entry.auto_done_value= item.auto_done
number_entry.max_value= item.max
number_entry:update_cursor(number_entry.cursor_start)
number_entry.prompt_actor:playcommand(
"Set", {THEME:GetString("ScreenOptionsCustomizeProfile", item.name)})
cursor_on_menu= "numpad"
elseif item.item_type == "list" then
cursor_on_menu= "list"
active_list= menu_items[menu_pos].list
list_pos= calc_list_pos(
profile[menu_items[menu_pos].get](profile), active_list)
update_list_cursor()
elseif item.item_type == "exit" then
local profile_id= GAMESTATE:GetEditLocalProfileID()
PROFILEMAN:SaveLocalProfile(profile_id)
SCREENMAN:GetTopScreen():StartTransitioningScreen("SM_GoToNextScreen")
SOUND:PlayOnce(THEME:GetPathS("Common", "Start"))
end
else
if button == "MenuLeft" or button == "MenuUp" then
if menu_pos > 1 then menu_pos= menu_pos - 1 end
update_menu_cursor()
elseif button == "MenuRight" or button == "MenuDown" then
if menu_pos < #menu_items then menu_pos= menu_pos + 1 end
update_menu_cursor()
end
end
elseif cursor_on_menu == "numpad" then
local done= number_entry:handle_input(button)
if done then
local item= menu_items[menu_pos]
profile[item.set](profile, number_entry.value)
menu_values[menu_pos]:playcommand(
"Set", {item_value_to_text(item, number_entry.value)})
fade_actor_to(fader, 0)
fade_actor_to(number_entry.container, 0)
cursor_on_menu= "main"
end
elseif cursor_on_menu == "list" then
if button == "MenuLeft" or button == "MenuUp" then
if list_pos > 1 then list_pos= list_pos - 1 end
update_list_cursor()
menu_values[menu_pos]:playcommand("PressLeft")
elseif button == "MenuRight" or button == "MenuDown" then
if list_pos < #active_list then list_pos= list_pos + 1 end
update_list_cursor()
menu_values[menu_pos]:playcommand("PressRight")
elseif button == "Start" then
profile[menu_items[menu_pos].set](profile, active_list[list_pos].setting)
local valactor= menu_values[menu_pos]
left_showing= false
right_showing= false
valactor:playcommand("HideLeft")
valactor:playcommand("HideRight")
cursor_on_menu= "main"
end
end
end
local args= {
Def.Actor{
OnCommand= function(self)
update_menu_cursor()
SCREENMAN:GetTopScreen():AddInputCallback(input)
end
},
-- 2. The Cursor
-- This is the cursor on the main portion of the menu.
-- It needs to have Move and Fit commands for when it's moved to a new
-- item on the list.
Def.Quad{
Name= "menu_cursor", InitCommand= function(self)
menu_cursor= self
self:horizalign(left)
self:setsize(0, 24)
self:diffuse(PlayerColor(PLAYER_1))
self:xy(menu_x - 10, menu_start)
end,
-- params contains the position to move to.
-- The -10 to x position is to give a bit of cursor on the left.
MoveCommand= function(self, params)
self:stoptweening()
self:linear(.1)
self:xy(params[1] - 10, params[2])
end,
-- param is the actor to fit around.
-- The +20 to width is to give a bit of cursor on each side.
FitCommand= function(self, param)
self:SetWidth(param:GetWidth() + 20)
end
},
}
-- Note that the "character" item in the menu only shows up if there are
-- characters to choose from. You might want to adjust positioning for that.
for i, item in ipairs(menu_items) do
local item_y= menu_start + ((i-1) * 24)
-- 3. The Menu Items
-- This creates the actor that will be used to show each item on the menu.
args[#args+1]= Def.BitmapText{
Name= "menu_" .. item.name, Font= "Common Normal",
Text= THEME:GetString("ScreenOptionsCustomizeProfile", item.name),
InitCommand= function(self)
-- Note that the item adds itself to the list menu_item_actors. This
-- is so that when the cursor is moved, the appropriate item can be
-- easily fetched for positioning and sizing the cursor.
-- Note the ActorFrames have a width of 1 unless you set it, so when
-- you change this from an BitmapText to a ActorFrame, you will have
-- to make the FitCommand of your cursor look at the children.
menu_item_actors[i]= self
self:xy(menu_x, item_y)
self:diffuse(Color.White)
self:horizalign(left)
end
}
if item.get then
local value_text= item_value_to_text(item, profile[item.get](profile))
-- 4. The Menu Values
-- Each of the values needs to have a SetCommand so it can be updated
-- when the player changes it.
-- And ActorFrame is used because values for list items need to have
-- left/right indicators for when the player is making a choice.
local value_args= {
Name= "value_" .. item.name,
InitCommand= function(self)
-- Note that the ActorFrame is being added to the list menu_values
-- so it can be easily fetched and updated when the value changes.
menu_values[i]= self
self:xy(value_x, menu_start + ((i-1) * 24))
end,
Def.BitmapText{
Name= "val", Font= "Common Normal", Text= value_text,
InitCommand= function(self)
self:diffuse(Color.White)
self:horizalign(left)
end,
SetCommand= function(self, param)
self:settext(param[1])
end,
}
}
if item.item_type == "list" then
-- 4.1 The L/R indicators
-- The L/R indicators are there to tell the player when there is a
-- choice to the left or right of the choice they are on.
-- Note that they are placed inside the ActorFrame for the value, so
-- when commands are played on the ActorFrame, they are played for the
-- indicators too.
-- The commands are ShowLeft, HideLeft, PressLeft, and the same for
-- Right.
-- Note that the right indicator has a SetCommand so it sees when the
-- value changes and checks the new width to position itself.
-- Show/Hide is only played when the indicator changes state.
-- Command execution order: Set, Show/Hide (if change occurred), Press
value_args[#value_args+1]= Def.ActorMultiVertex{
InitCommand= function(self)
self:SetVertices{
{{-5, 0, 0}, Color.White}, {{0, -10, 0}, Color.White},
{{0, 10, 0}, Color.White}}
self:SetDrawState{Mode= "DrawMode_Triangles"}
self:x(-8)
self:visible(false)
self:playcommand("Set", {value_text})
end,
ShowLeftCommand= cmd(visible, true),
HideLeftCommand= cmd(visible, false),
PressLeftCommand= cmd(stoptweening; linear, .2; zoom, 2; linear, .2;
zoom, 1),
}
value_args[#value_args+1]= Def.ActorMultiVertex{
InitCommand= function(self)
self:SetVertices{
{{5, 0, 0}, Color.White}, {{0, -10, 0}, Color.White},
{{0, 10, 0}, Color.White}}
self:SetDrawState{Mode= "DrawMode_Triangles"}
self:visible(false)
end,
SetCommand= function(self)
local valw= self:GetParent():GetChild("val"):GetWidth()
self:x(valw+8)
end,
ShowRightCommand= cmd(visible, true),
HideRightCommand= cmd(visible, false),
PressRightCommand= cmd(stoptweening; linear, .2; zoom, 2; linear, .2;
zoom, 1),
}
end
args[#args+1]= Def.ActorFrame(value_args)
end
end
-- 5. The Menu Fader
-- This is just something to tell the player that the menu is no longer
-- active because they are interacting with the numpad.
-- Default is to just fade this in over the top of the menu. If you want
-- something different, change the places in the input function that call
-- fade_actor_to to do what you want with the fader.
args[#args+1]= Def.Quad{
Name= "fader", InitCommand= function(self)
fader= self
self:setsize(270, #menu_items * 24)
self:horizalign(left)
self:vertalign(top)
self:xy(menu_x-10, menu_start-12)
self:diffuse(Color.Black)
self:diffusealpha(0)
end
}
args[#args+1]= number_entry:create_actors()
return Def.ActorFrame(args)
@@ -0,0 +1,149 @@
-- General layout: There is one choice for each possible background fitting
-- mode. Each choice will have three examples showing how backgrounds of
-- common aspect ratios will be stretched or clipped by that fitting mode.
-- fit_choices will be used later to tell the actor that controls input what
-- actors to use for each choice.
local fit_choices= {}
-- actors will contain all the actors on the screen.
local actors= {}
-- width_per_choice is how much of the screen width will be used to separate
-- each choice
local width_per_choice= _screen.w / #BackgroundFitMode
-- xstart is the x position of the first choice. It starts at
-- width_per_choice / 2 because that's the x coordinate of the center of the
-- first choice.
local xstart= width_per_choice / 2
-- mini_screen_w and mini_screen_h are the size of the miniature screen used
-- in the examples.
local mini_screen_w= _screen.w * .1
local mini_screen_h= _screen.h * .1
-- This function returns a BitmapText that will be used to label each example
-- in each choice.
-- w and h are the width and height of the aspect ratio, passed in so they
-- can be displayed to be read.
function BGFitNormalExampleText(w, h)
return Def.BitmapText{
-- To use a different font for the text, change the Font field.
Name= "example_label", Font= "Common Normal",
-- The "BG" part of the text is fetched with THEME:GetString so that it
-- can be translated.
Text= w .. ":" .. h .. " " .. THEME:GetString("ScreenSetBGFit", "BG"),
InitCommand= function(self)
-- This positions the text underneath its corresponding example.
self:y(mini_screen_h * .5 + 9)
self:zoom(.375)
end,
OnCommand=cmd(shadowlength,1)
}
end
-- This loop goes through all the array elements of the BackgroundFitMode
-- table and creates a choice actor for each one. The BackgroundFitMode
-- table contains an entry for each background fitting mode.
for i, mode in ipairs(BackgroundFitMode) do
actors[#actors+1]= Def.ActorFrame{
Name= mode, InitCommand= function(self)
-- This adds the actor to fit_choices so it can be used by the input
-- controller.
fit_choices[i]= self
-- This positions the choice on the screen. Choices are placed in a
-- row across the center of the screen, evenly spaced.
self:xy(xstart + ((i-1) * width_per_choice), _screen.cy)
end,
Def.BitmapText{
-- This actor is a label for the choice, so the player knows the name
-- of their choice.
Name= "mode_label", Font= "Common Normal",
Text= THEME:GetString("ScreenSetBGFit", ToEnumShortString(mode)),
InitCommand= function(self)
-- Position the label above the topmost example.
self:y(mini_screen_h * -2.5)
self:zoom(.75)
end,
OnCommand=cmd(diffusebottomedge,color("0.875,0.875,0.875");shadowlength,1)
},
-- BGFitChoiceExample is a function that creates an example to show how
-- a bg with a given aspect ratio is affected by the fitting mode for
-- this choice. It takes a number of parameters that control how the
-- example is created.
-- The simplest way to modify it to suit your theme is to just change
-- the png files and the two colors.
BGFitChoiceExample{
-- exname is the name of the image in Graphics that will be used as an
-- example bg to show distortion/cropping. "16_12_example.png" means
-- that "Graphics/ScreenSetBGFit 16_12_example.png" will be loaded.
exname= "16_12_example.png",
-- x and y are the position this example will be placed at.
-- x is 0 because the x positioning was handled above, when the choice
-- this example is part of was positioned.
-- This is the first example of 3, so y is set to position it above
-- the other two.
x= 0, y= mini_screen_h * -1.5,
-- mini_screen_w and mini_screen_h are the size of the miniature screen
-- the example will draw.
mini_screen_w= mini_screen_w, mini_screen_h= mini_screen_h,
-- example_function is the background fitting function for the mode
-- that will be set by this choice. bg_fit_functions is a table
-- that contains a function for each mode, so we set example_function
-- to the element of bg_fit_functions that has the same name as the
-- mode this choice is for.
example_function= bg_fit_functions[mode],
-- example_label is an actor that will be used to label this example,
-- so the player knows what size of bg is shown in this example.
example_label= BGFitNormalExampleText(16, 12),
-- sbg_color is the color of the quad representing the screen in the
-- example. sbg_color is the color of the outline representing the
-- screen in the example.
-- The quad is visible behind the example bg, so it's seen around the
-- edges when the example doesn't fill the miniature screen.
-- The outline is drawn over everything else so the player can see what
-- part of the example bg will be cut off.
sbg_color= color("0,0,0,1"), soutline_color= color("#39b54a")},
-- The parameters passed to the other examples have the same meaning as
-- above.
BGFitChoiceExample{
exname= "16_10_example.png", x= 0, y= 0,
mini_screen_w= mini_screen_w, mini_screen_h= mini_screen_h,
example_function= bg_fit_functions[mode],
example_label= BGFitNormalExampleText(16, 10),
sbg_color= color("0,0,0,1"), soutline_color= color("#39b54a")},
BGFitChoiceExample{
exname= "16_9_example.png", x= 0, y= mini_screen_h * 1.5,
mini_screen_w= mini_screen_w, mini_screen_h= mini_screen_h,
example_function= bg_fit_functions[mode],
example_label= BGFitNormalExampleText(16, 9),
sbg_color= color("0,0,0,1"), soutline_color= color("#39b54a")},
}
end
-- LoseFocus and GainFocus will be used on each choice to show which one
-- is currently selected.
local function LoseFocus(self)
-- We use stoptweening so that the player can't overflow the tween buffer
-- through repeated rapid input. Using stoptweening means that the actor
-- will stop at its current state and start tweening towards the new state
-- we are about to add to the tween stack.
-- If finishtweening was used, there would be jerking from the actor
-- suddenly reaching the end tween state.
self:stoptweening()
-- .25 seconds is a fine time for changing zoom size.
self:smooth(.125)
-- Unfocused choices are normal size.
self:zoom(1)
end
local function GainFocus(self)
self:stoptweening()
self:smooth(.125)
-- The choice with focus is 1.5 size.
self:zoom(1.25)
end
-- BGFitInputActor returns the actor that will handle input from the player
-- and apply their choice to the preference. We pass it fit_choices so that
-- it has the choice actors so it can show the player which once they have
-- selected.
actors[#actors+1]= BGFitInputActor(fit_choices, LoseFocus, GainFocus)
return Def.ActorFrame(actors)
@@ -53,6 +53,4 @@ local log_args= {
Font= "Common Error",
}
Trace("Loaded error layer.")
return Def.LogDisplay(log_args)
@@ -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);
@@ -3,12 +3,12 @@ return Def.ActorFrame {
-- InitCommand=cmd(LoadGameController,
--};
Def.DeviceList {
Font="Common normal";
Font="Common Normal",
InitCommand=cmd(x,SCREEN_LEFT+20;y,SCREEN_TOP+80;zoom,0.8;halign,0);
};
Def.InputList {
Font="Common normal";
Font="Common Normal",
InitCommand=cmd(x,SCREEN_CENTER_X-250;y,SCREEN_CENTER_Y;zoom,1;halign,0;vertspacing,8);
};
};
+1 -1
View File
@@ -1 +1 @@
_open sans Bold 24px
_roboto black Bold 24px
+1 -1
View File
@@ -1 +1 @@
_open sans book 24px
Common Normal
@@ -0,0 +1 @@
_open sans semibold 24px
+1 -1
View File
@@ -1 +1 @@
_open sans book 24px
_open sans semibold 24px
@@ -0,0 +1 @@
Common Bold
@@ -0,0 +1 @@
Common Normal
@@ -0,0 +1 @@
Common Normal
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

@@ -1,352 +0,0 @@
[common]
Baseline=27
Top=10
LineSpacing=33
DrawExtraPixelsLeft=2
DrawExtraPixelsRight=0
AdvanceExtraPixels=0
[main]
Line 0= !"#$%&'()*+,-.
Line 1=/0123456789:;<=
Line 2=>?@ABCDEFGHIJKL
Line 3=MNOPQRSTUVWXYZ[
Line 4=\]^_`abcdefghij
Line 5=klmnopqrstuvwxy
Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š
Line 7=‹ŒŽ‘’“”•–—˜™š›œ
Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬
Line 9=­®¯°±²³´µ¶·¸¹º»
Line 10=¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊ
Line 11=ËÌÍÎÏÐÑÒÓÔÕÖרÙ
Line 12=ÚÛÜÝÞßàáâãäåæçè
Line 13=éêëìíîïðñòóôõö÷
Line 14=øùúûüýþÿ
0=6
1=7
2=11
3=16
4=14
5=22
6=18
7=6
8=8
9=8
10=13
11=14
12=7
13=8
14=7
15=10
16=14
17=14
18=14
19=14
20=14
21=14
22=14
23=14
24=14
25=14
26=7
27=7
28=14
29=14
30=14
31=11
32=22
33=17
34=16
35=15
36=18
37=13
38=13
39=17
40=18
41=8
42=8
43=16
44=14
45=23
46=20
47=19
48=15
49=19
50=16
51=13
52=14
53=18
54=16
55=23
56=16
57=15
58=14
59=8
60=10
61=8
62=13
63=10
64=15
65=14
66=15
67=12
68=15
69=14
70=9
71=14
72=16
73=7
74=7
75=15
76=7
77=24
78=16
79=15
80=15
81=15
82=11
83=12
84=10
85=16
86=14
87=21
88=14
89=14
90=12
91=9
92=13
93=9
94=14
95=14
96=7
97=14
98=12
99=21
100=12
101=13
102=15
103=31
104=13
105=9
106=23
107=14
108=5
109=5
110=11
111=11
112=9
113=12
114=24
115=15
116=18
117=12
118=9
119=23
120=12
121=15
122=6
123=7
124=14
125=14
126=14
127=14
128=13
129=12
130=15
131=20
132=9
133=15
134=14
135=8
136=20
137=12
138=10
139=14
140=9
141=9
142=15
143=16
144=16
145=7
146=5
147=9
148=9
149=15
150=21
151=21
152=21
153=11
154=17
155=17
156=17
157=17
158=17
159=17
160=23
161=15
162=13
163=13
164=13
165=13
166=8
167=8
168=8
169=8
170=18
171=20
172=19
173=19
174=19
175=19
176=19
177=14
178=19
179=18
180=18
181=18
182=18
183=15
184=15
185=17
186=14
187=14
188=14
189=14
190=14
191=14
192=22
193=12
194=14
195=14
196=14
197=14
198=7
199=7
200=7
201=7
202=15
203=16
204=15
205=15
206=15
207=15
208=15
209=14
210=15
211=16
212=16
213=16
214=16
215=14
216=15
217=14
[alt]
Line 0= Ą˘Ł¤ĽŚ§¨Š
Line 1=ŞŤŹ­ŽŻ°ą˛ł
Line 2=´ľśˇ¸šşťź˝
Line 3=žżŔÁÂĂÄĹĆÇ
Line 4=ČÉĘËĚÍÎĎĐŃ
Line 5=ŇÓÔŐÖ×ŘŮÚŰ
Line 6=ÜÝŢßŕáâăäĺ
Line 7=ćçčéęëěíîď
Line 8=đńňóôőö÷řů
Line 9=úűüýţ˙
0=6
1=17
2=15
3=14
4=14
5=14
6=13
7=12
8=15
9=13
10=13
11=14
12=14
13=8
14=14
15=14
16=10
17=14
18=5
19=8
20=15
21=7
22=12
23=15
24=5
25=12
26=12
27=10
28=12
29=14
30=12
31=12
32=16
33=17
34=17
35=17
36=17
37=14
38=15
39=15
40=15
41=13
42=13
43=13
44=13
45=8
46=8
47=18
48=18
49=20
50=20
51=19
52=19
53=19
54=19
55=14
56=16
57=18
58=18
59=18
60=18
61=15
62=14
63=17
64=11
65=14
66=14
67=14
68=14
69=7
70=12
71=12
72=12
73=14
74=14
75=14
76=14
77=7
78=7
79=15
80=16
81=16
82=16
83=15
84=15
85=15
86=15
87=14
88=11
89=16
90=16
91=16
92=16
93=14
94=10
95=7
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

@@ -1,352 +0,0 @@
[common]
Baseline=27
Top=10
LineSpacing=33
DrawExtraPixelsLeft=2
DrawExtraPixelsRight=2
AdvanceExtraPixels=0
[main]
Line 0= !"#$%&'()*+,-.
Line 1=/0123456789:;<=
Line 2=>?@ABCDEFGHIJKL
Line 3=MNOPQRSTUVWXYZ[
Line 4=\]^_`abcdefghij
Line 5=klmnopqrstuvwxy
Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š
Line 7=‹ŒŽ‘’“”•–—˜™š›œ
Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬
Line 9=­®¯°±²³´µ¶·¸¹º»
Line 10=¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊ
Line 11=ËÌÍÎÏÐÑÒÓÔÕÖרÙ
Line 12=ÚÛÜÝÞßàáâãäåæçè
Line 13=éêëìíîïðñòóôõö÷
Line 14=øùúûüýþÿ
0=6
1=6
2=10
3=16
4=14
5=20
6=18
7=5
8=7
9=7
10=13
11=14
12=6
13=8
14=6
15=9
16=14
17=14
18=14
19=14
20=14
21=14
22=14
23=14
24=14
25=14
26=6
27=6
28=14
29=14
30=14
31=10
32=22
33=15
34=16
35=15
36=17
37=13
38=12
39=17
40=18
41=7
42=6
43=15
44=12
45=22
46=18
47=19
48=14
49=19
50=15
51=13
52=13
53=17
54=14
55=22
56=14
57=13
58=14
59=8
60=9
61=8
62=13
63=11
64=14
65=13
66=15
67=11
68=15
69=13
70=8
71=13
72=15
73=6
74=6
75=13
76=6
77=22
78=15
79=14
80=15
81=15
82=10
83=11
84=8
85=15
86=12
87=19
88=13
89=12
90=11
91=9
92=13
93=9
94=14
95=14
96=6
97=14
98=10
99=19
100=12
101=12
102=14
103=29
104=13
105=7
106=22
107=14
108=4
109=4
110=8
111=8
112=9
113=12
114=24
115=14
116=19
117=11
118=7
119=23
120=11
121=13
122=6
123=6
124=14
125=14
126=14
127=14
128=13
129=12
130=14
131=20
132=8
133=12
134=14
135=8
136=20
137=12
138=10
139=14
140=8
141=8
142=14
143=15
144=16
145=6
146=5
147=8
148=9
149=12
150=19
151=19
152=19
153=10
154=15
155=15
156=15
157=15
158=15
159=15
160=21
161=15
162=13
163=13
164=13
165=13
166=7
167=7
168=7
169=7
170=17
171=18
172=19
173=19
174=19
175=19
176=19
177=14
178=19
179=17
180=17
181=17
182=17
183=13
184=15
185=15
186=13
187=13
188=13
189=13
190=13
191=13
192=21
193=11
194=13
195=13
196=13
197=13
198=6
199=6
200=6
201=6
202=14
203=15
204=14
205=14
206=14
207=14
208=14
209=14
210=14
211=15
212=15
213=15
214=15
215=12
216=15
217=12
[alt]
Line 0= Ą˘Ł¤ĽŚ§¨Š
Line 1=ŞŤŹ­ŽŻ°ą˛ł
Line 2=´ľśˇ¸šşťź˝
Line 3=žżŔÁÂĂÄĹĆÇ
Line 4=ČÉĘËĚÍÎĎĐŃ
Line 5=ŇÓÔŐÖ×ŘŮÚŰ
Line 6=ÜÝŢßŕáâăäĺ
Line 7=ćçčéęëěíîď
Line 8=đńňóôőö÷řů
Line 9=úűüýţ˙
0=6
1=15
2=14
3=13
4=14
5=12
6=13
7=12
8=14
9=13
10=13
11=13
12=14
13=8
14=14
15=14
16=10
17=13
18=5
19=6
20=14
21=6
22=11
23=14
24=5
25=11
26=11
27=8
28=11
29=14
30=11
31=11
32=15
33=15
34=15
35=15
36=15
37=12
38=15
39=15
40=15
41=13
42=13
43=13
44=13
45=7
46=7
47=17
48=17
49=18
50=18
51=19
52=19
53=19
54=19
55=14
56=15
57=17
58=17
59=17
60=17
61=13
62=13
63=15
64=10
65=13
66=13
67=13
68=13
69=6
70=11
71=11
72=11
73=13
74=13
75=13
76=13
77=6
78=6
79=15
80=15
81=15
82=15
83=14
84=14
85=14
86=14
87=14
88=10
89=15
90=15
91=15
92=15
93=12
94=8
95=6
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@@ -0,0 +1,352 @@
[common]
Baseline=26
Top=9
LineSpacing=32
DrawExtraPixelsLeft=2
DrawExtraPixelsRight=0
AdvanceExtraPixels=0
[main]
Line 0= !"#$%&'()*+,-.
Line 1=/0123456789:;<=
Line 2=>?@ABCDEFGHIJKL
Line 3=MNOPQRSTUVWXYZ[
Line 4=\]^_`abcdefghij
Line 5=klmnopqrstuvwxy
Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š
Line 7=‹ŒŽ‘’“”•–—˜™š›œ
Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬
Line 9=­®¯°±²³´µ¶·¸¹º»
Line 10=¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊ
Line 11=ËÌÍÎÏÐÑÒÓÔÕÖרÙ
Line 12=ÚÛÜÝÞßàáâãäåæçè
Line 13=éêëìíîïðñòóôõö÷
Line 14=øùúûüýþÿ
0=6
1=7
2=8
3=14
4=14
5=18
6=16
7=4
8=9
9=9
10=11
11=13
12=6
13=11
14=7
15=8
16=14
17=14
18=14
19=14
20=14
21=14
22=14
23=14
24=14
25=14
26=7
27=7
28=12
29=14
30=12
31=12
32=21
33=15
34=15
35=15
36=16
37=14
38=14
39=16
40=17
41=7
42=14
43=16
44=13
45=21
46=17
47=16
48=16
49=17
50=16
51=15
52=14
53=17
54=15
55=21
56=15
57=15
58=14
59=7
60=10
61=7
62=11
63=11
64=8
65=13
66=13
67=12
68=13
69=13
70=9
71=13
72=13
73=7
74=6
75=13
76=7
77=21
78=13
79=13
80=13
81=13
82=9
83=12
84=9
85=13
86=12
87=17
88=12
89=12
90=12
91=8
92=6
93=8
94=15
95=13
96=5
97=9
98=9
99=19
100=13
101=14
102=12
103=23
104=15
105=8
106=23
107=14
108=5
109=5
110=9
111=9
112=9
113=17
114=20
115=12
116=15
117=12
118=7
119=22
120=12
121=15
122=6
123=7
124=14
125=14
126=16
127=15
128=6
129=15
130=13
131=19
132=11
133=12
134=13
135=11
136=19
137=12
138=10
139=13
140=10
141=10
142=9
143=15
144=13
145=8
146=7
147=7
148=11
149=12
150=17
151=17
152=20
153=12
154=15
155=15
156=15
157=15
158=15
159=15
160=23
161=15
162=14
163=14
164=14
165=14
166=7
167=7
168=7
169=7
170=16
171=17
172=16
173=16
174=16
175=16
176=16
177=13
178=17
179=17
180=17
181=17
182=17
183=15
184=15
185=16
186=13
187=13
188=13
189=13
190=13
191=13
192=20
193=12
194=13
195=13
196=13
197=13
198=7
199=7
200=7
201=7
202=14
203=13
204=13
205=13
206=13
207=13
208=13
209=14
210=14
211=13
212=13
213=13
214=13
215=12
216=13
217=12
[alt]
Line 0= Ą˘Ł¤ĽŚ§¨Š
Line 1=ŞŤŹ­ŽŻ°ą˛ł
Line 2=´ľśˇ¸šşťź˝
Line 3=žżŔÁÂĂÄĹĆÇ
Line 4=ČÉĘËĚÍÎĎĐŃ
Line 5=ŇÓÔŐÖ×ŘŮÚŰ
Line 6=ÜÝŢßŕáâăäĺ
Line 7=ćçčéęëěíîď
Line 8=đńňóôőö÷řů
Line 9=úűüýţ˙
0=6
1=15
2=11
3=12
4=16
5=13
6=15
7=15
8=13
9=15
10=15
11=14
12=14
13=11
14=14
15=14
16=10
17=13
18=8
19=7
20=9
21=8
22=12
23=12
24=7
25=12
26=12
27=9
28=12
29=11
30=12
31=12
32=16
33=15
34=15
35=15
36=15
37=13
38=15
39=15
40=15
41=14
42=14
43=14
44=14
45=7
46=7
47=16
48=16
49=17
50=17
51=16
52=16
53=16
54=16
55=13
56=16
57=17
58=17
59=17
60=17
61=15
62=14
63=16
64=9
65=13
66=13
67=13
68=13
69=7
70=12
71=12
72=12
73=13
74=13
75=13
76=13
77=7
78=7
79=15
80=14
81=13
82=13
83=13
84=13
85=13
86=13
87=14
88=9
89=13
90=13
91=13
92=13
93=12
94=9
95=8
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,100 @@
local t = Def.ActorFrame {
InitCommand=cmd(runcommandsonleaves,cmd(ztest,true));
};
t[#t+1] = LoadActor("frame") .. {
InitCommand=cmd(diffusealpha,0.1;);
};
t[#t+1] = Def.TextBanner {
InitCommand=cmd(x,-196;y,0;Load,"TextBannerHighScores");
SetCommand=function(self, params)
if params.Song then
self:SetFromSong( params.Song );
self:diffuse( SONGMAN:GetSongColor(params.Song) );
else
self:SetFromString( params.Course:GetTitle() );
self:diffuse( SONGMAN:GetCourseColor(params.Course) );
end
end;
};
local NumColumns = THEME:GetMetric(Var "LoadingScreen", "NumColumns");
local c;
local Scores = Def.ActorFrame {
InitCommand = function(self)
c = self:GetChildren();
end;
};
t[#t+1] = Scores;
for idx=1,NumColumns do
local x_pos = -60 + 80 * (idx-1);
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Name") .. {
Name = idx .. "Name";
InitCommand=cmd(x,x_pos;y,6;shadowlengthx,0;shadowlengthy,2;shadowcolor,color("#000000");maxwidth,68;);
};
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Score") .. {
Name = idx .. "Score";
InitCommand=cmd(x,x_pos;y,-10;shadowlengthx,0;shadowlengthy,2;shadowcolor,color("#000000");maxwidth,68;);
};
Scores[#Scores+1] = LoadActor("filled") .. {
Name = idx .. "Filled";
InitCommand=cmd(x,x_pos;);
};
Scores[#Scores+1] = LoadActor("empty") .. {
Name = idx .. "Empty";
InitCommand=cmd(x,x_pos;);
};
end
local sNoScoreName = THEME:GetMetric("Common", "NoScoreName");
Scores.SetCommand=function(self, params)
local pProfile = PROFILEMAN:GetMachineProfile();
for name, child in pairs(c) do
child:visible(false);
end
for idx=1,NumColumns do
c[idx .. "Empty"]:visible(true);
end
local Current = params.Song or params.Course;
if Current then
for idx, CurrentItem in pairs(params.Entries) do
if CurrentItem then
local hsl = pProfile:GetHighScoreList(Current, CurrentItem);
local hs = hsl and hsl:GetHighScores();
--[[Warn( tostring(CurrentItem:GetStepsType()) .. ", " ..
tostring(CurrentItem:GetDifficulty()) .. ": " ..
tostring(hsl) .. ", " ..
tostring(#hs) );]]
local name = c[idx .. "Name"];
local score = c[idx .. "Score"];
local filled = c[idx .. "Filled"];
local empty = c[idx .. "Empty"];
--assert( c[sNameType], sNameType );
--assert( c[sScoreType], sScoreType );
name:visible( true );
score:visible( true );
filled:visible( true );
empty:visible( false );
if hs and #hs > 0 then
name:settext( hs[1]:GetName() );
score:settext( FormatPercentScore( hs[1]:GetPercentDP() ) );
else
name:settext( sNoScoreName );
score:settext( FormatPercentScore( 0 ) );
end
end
end;
end
end;
return t;
Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,16 @@
return Def.BitmapText{
Font="Common Normal",
InitCommand= cmd(x, SCREEN_CENTER_X; zoom, .75, 0; diffuse, color("#808080")),
OnCommand= function(self)
self:diffusealpha(0)
self:decelerate(0.5)
self:diffusealpha(1)
-- fancy effect: Look at the name (which is set by the screen) to set text
self:settext(
THEME:GetString("ScreenMapControllers", "Action" .. self:GetName()))
end,
OffCommand=cmd(stoptweening;accelerate,0.3;diffusealpha,0;queuecommand,"Hide"),
HideCommand=cmd(visible,false),
GainFocusCommand=cmd(diffuseshift;effectcolor2,color("#808080");effectcolor1,color("#FFFFFF")),
LoseFocusCommand=cmd(stopeffect),
}
@@ -1,10 +0,0 @@
return LoadFont("Common Normal") .. {
Text="Exit";
InitCommand=cmd(x,SCREEN_CENTER_X;zoom,0.75;shadowlength,0;diffuse,color("#808080"));
OnCommand=cmd(diffusealpha,0;decelerate,0.5;diffusealpha,1);
OffCommand=cmd(stoptweening;accelerate,0.3;diffusealpha,0;queuecommand,"Hide");
HideCommand=cmd(visible,false);
GainFocusCommand=cmd(diffuseshift;effectcolor2,color("#808080");effectcolor1,color("#FFFFFF"));
LoseFocusCommand=cmd(stopeffect);
};
@@ -0,0 +1,17 @@
return Def.ActorFrame{
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y),
Def.Quad{
InitCommand=cmd(zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color.Black;diffusealpha,0),
TweenOnCommand=cmd(stoptweening;diffusealpha,1;linear,0.5;diffusealpha,0.8),
TweenOffCommand=cmd(stoptweening;linear,0.5;diffusealpha,0),
},
Def.ActorFrame{
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("NoSetListPrompt"),
InitCommand=cmd(y,10;wrapwidthpixels,SCREEN_WIDTH-48;diffusealpha,0),
TweenOnCommand=cmd(stoptweening;diffusealpha,0;sleep,0.5125;linear,0.125;diffusealpha,1),
TweenOffCommand=cmd(stoptweening;linear,0.5;diffusealpha,0),
},
},
}
@@ -0,0 +1,24 @@
return Def.ActorFrame{
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y),
Def.Quad{
InitCommand=cmd(zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color.Black),
TweenOnCommand=cmd(diffusealpha,1;linear,0.5;diffusealpha,0.8),
TweenOffCommand=cmd(linear,0.5;diffusealpha,0),
},
Def.ActorFrame{
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("WarningHeader"),
InitCommand=cmd(y,-80;diffuse,Color.Red),
TweenOnCommand=cmd(diffusealpha,0;zoomx,2;zoomy,0;sleep,0.5;smooth,0.25;zoom,1;diffusealpha,1),
TweenOffCommand=cmd(linear,0.5;diffusealpha,0),
},
Def.BitmapText{
Font="Common Normal",
Text=ScreenString("WarningText"),
InitCommand=cmd(y,10;wrapwidthpixels,SCREEN_WIDTH-48),
TweenOnCommand=cmd(diffusealpha,0;sleep,0.5125;linear,0.125;diffusealpha,1),
TweenOffCommand=cmd(linear,0.5;diffusealpha,0),
},
},
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

+105 -5
View File
@@ -345,6 +345,7 @@ AutogenGroupCourses=Show group Nonstop and Endless courses that were created by
AutogenSteps=Automatically generate steps from other game types.
BGBrightness=Controls how bright the background will appear. Turn this setting down if you have a hard time seeing the notes.
Background=Change options that control the backgrounds that play during gameplay.
BackgroundFitMode=Change the way backgrounds are scaled to fit the screen.
BarDrain=BarDrain
BatLives=BatLives
Bookkeeping=Check coin drop statistics.
@@ -391,6 +392,7 @@ Exit=
Fail=Fail
FastLoad=If enabled, don't check songs for changes on load.
FastLoadAdditionalSongs=If enabled, don't check songs for changes to Additional Songs on load.
FastNoteRendering=If enabled, the z buffer is not cleared after every note. This causes 3d noteskins to collide, but substantially improves performance in gameplay.
Fill Machine Stats=
Game=Change the current game type with this option.
GetRankingName=Determines if name entry should never be shown, always be shown, or shown when the course is listed on the high scores screen.
@@ -456,6 +458,7 @@ Scoreboard=Enables scoreboard
ScoringType=Defines which scoring method to use.
ScreenFilter=Screen Filter
Scroll=Scroll
Set BG Fit Mode=Set background fitting mode.
Select Group=Toggle Songs in this Group.
Select Profile=Choose a profile
Server=Start Local Server
@@ -489,6 +492,7 @@ Test Input=Test the responsiveness of connected joysticks.
Test Lights=Test the responsiveness of connected lights.
TextureColorDepth=Choose the color depth of textures. 32 bit textures use more memory, but look nicer.
Theme=Choose from this list of installed theme packs.
ThreeKeyNavigation=&oq;Five Key&oq;: L/R/D/U menu buttons and Start. &oq;Three Key&oq;: L/R menu buttons and Start.
TimingWindowScale=Increase this value to cause your steps to be judged more strictly (i.e. shrink the timing window).
Toggle Song=Toggle Song
Turn=Turn
@@ -594,6 +598,7 @@ AllGroups=All Groups
Alternate=Alternate
Always=Always
Animations=Animations
Arbitrary Remap Columns=Arbitrarily Remap
Arcade Style=Arcade Style
Ask=Ask
AttackMines=AttackMines
@@ -635,6 +640,8 @@ Connect=Connect...
Copy Left To Right=Copy Left To Right
Copy Right To Left=Copy Right To Left
Courses Only=Courses Only
CoverDistort=Cover Distort
CoverPreserve=Cover Preserve
Create New=Create New
Cross=Cross
Custom=Custom
@@ -652,7 +659,7 @@ Double for 1 Credit=Double for 1 Credit
Drunk=Drunk
Dynamic Random=Dynamic Random
Echo=Echo
End of Song=End of Song
EndOfSong=End of Song
FailAtEnd=Fail at end
EffectSpeed=Speed
EffectPitch=Pitch
@@ -663,6 +670,11 @@ Expand 2->3=Expand 2->3
Expand 2x=Expand 2x
Expand 3->4=Expand 3->4
Fast=Fast
FastNoteRendering=Fast Note Rendering
FitInside=Fit Inside
FitInsideAvoidLetter=Avoid Letter
FitInsideAvoidPillar=Avoid Pillar
Five Key Menu=Five Key
Flat=Flat
Flip=Flip
Floored=Floored
@@ -702,6 +714,7 @@ Mirror=Mirror
N/A=N/A
Native Language=Native Language
Never=Never
NextRow=&nextrow;
New=New
NewEdit=-New Edit-
No=No
@@ -781,9 +794,11 @@ SuddenOffset=Sudden Offset
SuperShuffle=Cement Mixer
SoftShuffle=Soft Shuffle
Swap Sides=Swap Sides
Swap Up/Down=Swap Up/Down
Sync Machine=Sync Machine
Sync Song=Sync Song
Sync Tempo=Sync Tempo
Three Key Menu=Three Key
Tiny=Tiny
Tipsy=Tipsy
Title Only=Title Only
@@ -846,6 +861,7 @@ AutogenGroupCourses=Autogen Group&nbsp;Courses
AutogenSteps=Autogen Steps
BGBrightness=Brightness
Background=Background
BackgroundFitMode=BG Fit Mode
BarDrain=Bar Drain
BatLives=Bat Lives
Base Difficulty=Base Difficulty
@@ -905,6 +921,7 @@ DisplayResolution=Display Resolution
Duration seconds=Duration seconds
EasterEggs=Easter Eggs
Edit Songs/Steps=Edit Songs/Steps
FastNoteRendering=Fast Note Rendering
Genre=Genre
Practice Songs/Steps=Practice Songs/Steps
Edit Courses=Edit Courses
@@ -1070,6 +1087,7 @@ Secret=Secret
Secs Remaining=Seconds Remaining
Server=Server
Servers=Servers
Set BG Fit Mode=Set BG Fit Mode
Set P1=Set P1
Set P2=Set P2
Set modifiers=Set modifiers
@@ -1119,6 +1137,7 @@ Test Input=Test Input
Test Lights=Test Lights
TextureColorDepth=Texture Color
Theme=Theme
ThreeKeyNavigation=Menu Navigation
TimingWindowScale=Judge Difficulty
Transform=Transform
Transfer Edits to USB=Transfer Edits to USB
@@ -1344,6 +1363,7 @@ or=or
Zoom In Camera=Zoom In Camera
[ScreenEdit]
'%s' is not a track id.='%s' is not a track id.
Adding New Attack=Enter the new modifier for this attack.\nThe length can be adjusted later.\nLeave it blank to cancel.
Adding New Mod=Please enter the new modifier for this attack.\n\nLeave it blank to cancel.
Edit Existing Mod=Please adjust the present modifier below.\n\nLeave it blank to erase the mod.
@@ -1387,6 +1407,8 @@ Enter a new preview start.=Enter when the music sample starts.
Enter a new preview length.=Enter how long the music sample lasts.
Enter a new min BPM.=Enter the minimum displayed BPM.
Enter a new max BPM.=Enter the maximum displayed BPM.
Enter the new track mapping.=Enter the new track mapping.
Entry %d, '%d', is out of range 1 to %d.=Entry %d, '%d', is out of range 1 to %d.
More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted.
No backgrounds available=No backgrounds available
EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nN and M keys:\n swap tap notes\nCtrl + N/M:\n swap cycled segment\nCtrl + ,/.:\n cycle segments\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar: Set area\n marker\nT key: Switch Timing\nEnter: Area Menu\nA Key: Alter Menu\nEscape: Main Menu\nF4: Timing Menu\nF1: Show help\n
@@ -1399,6 +1421,7 @@ The change has been reverted.=The change has been reverted.
This change creates more than %d notes in a measure.=This change creates more than %d notes in a measure.
This change creates notes past the end of the music and is not allowed.=This change creates notes past the end of the music and is not allowed.
This will destroy all unsaved changes.=This will destroy all unsaved changes.
Too many tracks specified.=Too many tracks specified.
Undo=Undo
You must be in Song Timing Mode to edit BG Changes.=You must be in Song Timing Mode to edit BG Changes.
You must have an area selected to enter the Alter Menu.=You must have an area selected to enter the Alter Menu.
@@ -1508,15 +1531,23 @@ Warning=Warning
BodyText=The StepMania program source code is licensed under a permissive open-source license.\n\nThe StepMania name and logos are protected by Trademark law.\n\nThe StepMania default theme SOUNDS ARE SEPARATELY OWNED BY THE AUTHORS. ALL OTHER THEME COMPONENTS ARE LICENSED UNDER THE STEPMANIA LICENSE.\n\nSee license.txt for details.
[ScreenMapControllers]
ActionClear=Clear To Default
ActionReload=Reload From Disk
ActionSave=Save To Disk
ActionSetList=Assign List
ActionExit=Exit
Default=Default
HeaderText=Map Controllers
InvalidButton=That key can not be mapped.
KeyName=Key Name
NoSetListPrompt=No entries in the list to set. Add entries to the list by hitting 'm' when the cursor is on them.
%s slots=%s slots
Primary=Primary
SavePrompt=Save settings before exiting?
Secondary=Secondary
WarningHeader=WARNING!
WarningText=Please ensure that you do not overwrite any important keymappings, such as:\n&MENULEFT; LEFT &MENURIGHT; RIGHT &MENUUP; UP &MENUDOWN; DOWN &START; START &BACK; BACK or &SELECT; SELECT. Do not apply keymappings that you do not know the function of or unmap important keys!
[ScreenMapControllers2]
Add Mapping=Add Mapping
[ScreenNetRoom]
Enter a description for the room:=Enter a description for the room:
Enter a password for the room (blank, no password):=Enter a password for the room (blank, no password):
@@ -1587,6 +1618,20 @@ Are you sure you want to delete the profile '%s'?=Are you sure you want to delet
Enter a name for the profile.=Enter a name for the profile.
NewProfileDefaultName=New
[ScreenOptionsCustomizeProfile]
HeaderText=Edit Profile
weight=Weight (lbs)
voomax=VO2Max
birth_year=Birth Year
gender=Gender
calorie_calc=Calorie Calculation
character=Character
exit=Exit
use_heart=Use Heart Rate
use_steps=Use Step Count
male=Male
female=Female
[ScreenOptionsMaster]
Exit=Exit
@@ -1603,6 +1648,14 @@ size ???=size ???
HeaderText=Options
HeaderSubText=You can configure the game here
[ScreenSetBGFit]
CoverDistort=Distort
CoverPreserve=Preserve
FitInside=Fit
FitInsideAvoidLetter=Avoid Letter
FitInsideAvoidPillar=Avoid Pillar
BG=BG
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Download cancelled.
@@ -1621,6 +1674,16 @@ No=NO
Yes=YES
Cancel=CANCEL
[ScreenHighScores]
HeaderText=High Scores
HeaderSubText=Who's the top dog?
[ScreenHeartEntry]
HeaderText=Check Your Pulse!
[ScreenContinue]
HelpText=&START; Advance Timer
[ScreenRanking]
[ScreenSMOnlineLogin]
@@ -1888,10 +1951,47 @@ dance-solo=solo
dance-threepanel=3panel
dance-routine=routine
lights-cabinet=Lights
# SSC
#
Dance_Single=Single
Dance_Double=Double
Dance_Couple=Couple
Dance_Solo=Solo
Dance_Routine=Routine
Dance_Threepanel=3 Panels
Pump_Single=Single
Pump_Double=Double
Pump_Halfdouble=Half-Double
Pump_Couple=Couple
Pump_Routine=Routine
Kb7_Single=KB7
Ez2_Single=Single
Ez2_Double=Double
Ez2_Real=Real
Para_Single=Single
Ds3ddx_Single=Single
Bm_Single5=5 Keys
Bm_Double5=10 Keys
Bm_Single7=7 Keys
Bm_Double7=14 Keys
Maniax_Single=Single
Maniax_Double=Double
Techno_Single4=Single 4
Techno_Single5=Single 5
Techno_Single8=Single 8
Techno_Double4=Double 4
Techno_Double5=Double 5
Techno_Double8=Double 8
Pnm_Five=5 Button
Pnm_Nine=9 Button
Guitar_Five=5 Frets
Karaoke=Karaoke
Lights_Cabinet=Lights
[StyleType]
StyleType_OnePlayerOneSide=1 Player
StyleType_TwoPlayersTwoSides=2 Players - Versus
StyleType_OnePlayerTwoSides=1 Player
StyleType_TwoPlayersSharedSides=2 Players - Cooperative
[TapNoteScore]
AvoidMine=Avoid Mine
View File
+39 -2
View File
@@ -151,8 +151,45 @@ function Actor:FullScreen()
self:stretchto( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT )
end
bg_fit_functions= {
BackgroundFitMode_CoverDistort= function(self, width, height)
local xscale= width / self:GetWidth()
local yscale= height / self:GetHeight()
self:zoomx(xscale)
self:zoomy(yscale)
end,
BackgroundFitMode_CoverPreserve= function(self, width, height)
local xscale= width / self:GetWidth()
local yscale= height / self:GetHeight()
self:zoom(math.max(xscale, yscale))
end,
BackgroundFitMode_FitInside= function(self, width, height)
local xscale= width / self:GetWidth()
local yscale= height / self:GetHeight()
self:zoom(math.min(xscale, yscale))
end,
BackgroundFitMode_FitInsideAvoidLetter= function(self, width, height)
local yscale= height / self:GetHeight()
self:zoom(yscale)
end,
BackgroundFitMode_FitInsideAvoidPillar= function(self, width, height)
local xscale= width / self:GetWidth()
self:zoom(xscale)
end
}
function Actor:scale_or_crop_background_no_move()
local fit_mode= PREFSMAN:GetPreference("BackgroundFitMode")
if bg_fit_functions[fit_mode] then
bg_fit_functions[fit_mode](self, SCREEN_WIDTH, SCREEN_HEIGHT)
else
self:scaletocover(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)
end
end
function Actor:scale_or_crop_background()
self:scaletocover(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)
self:scale_or_crop_background_no_move()
self:xy(SCREEN_CENTER_X, SCREEN_CENTER_Y)
end
function Actor:CenterX() self:x(SCREEN_CENTER_X) end
@@ -371,7 +408,7 @@ DrawOrder = {
-- deprecated aliases:
function Actor:hidden(bHide)
Warn("hidden is deprecated, use visible instead. (used on ".. self:GetName() ..")")
lua.ReportScriptError("hidden is deprecated, use visible instead. (used on ".. self:GetName() ..")")
self:visible(not bHide)
end
+56 -6
View File
@@ -26,6 +26,14 @@ function SelectMusicOrCourse()
end
end
function GameOverOrContinue()
if THEME:GetMetric("ScreenContinue", "ContinueEnabled") then
return "ScreenContinue"
else
return "ScreenGameOver"
end
end
-- functions used for Routine mode
function IsRoutine()
return GAMESTATE:GetCurrentStyle() and GAMESTATE:GetCurrentStyle():GetStyleType() == "StyleType_TwoPlayersSharedSides"
@@ -42,7 +50,7 @@ Branch = {
end,
NoiseTrigger = function()
local hour = Hour()
return hour > 3 and hour < 6 and "ScreenNoise" or "ScreenInit"
return hour > 3 and hour < 6 and "ScreenNoise" or "ScreenHighScores"
end,
TitleMenu = function()
-- home mode is the most assumed use of sm-ssc.
@@ -59,6 +67,13 @@ Branch = {
return "ScreenTitleJoin"
end
end,
AfterTitleMenu = function()
if PREFSMAN:GetPreference("ShowCaution") then
return "ScreenCaution"
else
return Branch.StartGame()
end
end,
StartGame = function()
-- Check to see if there are 0 songs installed. Also make sure to check
-- that the additional song count is also 0, because there is
@@ -119,9 +134,13 @@ Branch = {
if GAMESTATE:IsEventMode() then
return SelectMusicOrCourse()
elseif STATSMAN:GetCurStageStats():AllFailed() then
return "ScreenGameOver"
return GameOverOrContinue()
elseif GAMESTATE:GetSmallestNumStagesLeftForAnyHumanPlayer() == 0 then
return "ScreenEvaluationSummary"
if not GAMESTATE:IsCourseMode() then
return "ScreenEvaluationSummary"
else
return GameOverOrContinue()
end
else
return SelectMusicOrCourse()
end
@@ -171,8 +190,7 @@ Branch = {
GameplayScreen = function()
return IsRoutine() and "ScreenGameplayShared" or "ScreenGameplay"
end,
AfterGameplay = function()
-- pick an evaluation screen based on settings.
EvaluationScreen= function()
if IsNetSMOnline() then
return "ScreenNetEvaluation"
else
@@ -180,6 +198,27 @@ Branch = {
return "ScreenEvaluationNormal"
end
end,
AfterGameplay = function()
-- pick an evaluation screen based on settings.
if THEME:GetMetric("ScreenHeartEntry", "HeartEntryEnabled") then
local go_to_heart= false
for i, pn in ipairs(GAMESTATE:GetEnabledPlayers()) do
local profile= PROFILEMAN:GetProfile(pn)
if profile and profile:GetIgnoreStepCountCalories() then
go_to_heart= true
end
end
if go_to_heart then
return "ScreenHeartEntry"
end
return Branch.EvaluationScreen()
else
return Branch.EvaluationScreen()
end
end,
AfterHeartEntry= function()
return Branch.EvaluationScreen()
end,
AfterEvaluation = function()
if GAMESTATE:IsCourseMode() then
return "ScreenProfileSave"
@@ -211,8 +250,19 @@ Branch = {
return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu"
end,
AfterSaveSummary = function()
return "ScreenGameOver"
return GameOverOrContinue()
-- [[ Enable when Finished ]]
-- return GAMESTATE:AnyPlayerHasRankingFeats() and "ScreenNameEntryTraditional" or "ScreenGameOver"
end,
AfterContinue = function()
if GAMESTATE:GetNumPlayersEnabled() == 0 then
return "ScreenGameOver"
end
if STATSMAN:GetStagesPlayed() == 0 then
return "ScreenSelectStyle"
end
return "ScreenProfileLoad"
end
}
+20 -11
View File
@@ -47,8 +47,12 @@ setmetatable(Color, { __call = function(self, c) return self[c] end })
GameColor = {
PlayerColors = {
PLAYER_1 = color("#ef403d"),
PLAYER_2 = color("#0089cf"),
PLAYER_1 = color("#ed5565"),
PLAYER_2 = color("#5d9cec"),
},
PlayerDarkColors = {
PLAYER_1 = color("#da4453"),
PLAYER_2 = color("#4a89dc"),
},
Difficulty = {
--[[ These are for 'Custom' Difficulty Ranks. It can be very useful
@@ -126,17 +130,22 @@ function ColorDarkTone(c)
end
function PlayerColor( pn )
if pn == PLAYER_1 then return color("#ef403d") end -- pink-red
if pn == PLAYER_2 then return color("#0089cf") end -- sea-blue
return color("1,1,1,1")
end
function PlayerScoreColor( pn )
if pn == PLAYER_1 then return color("#ef403d") end -- pink-red
if pn == PLAYER_2 then return color("#0089cf") end -- sea-blue
if pn == PLAYER_1 then return GameColor.PlayerColors["PLAYER_1"] end
if pn == PLAYER_2 then return GameColor.PlayerColors["PLAYER_2"] end
return color("1,1,1,1")
end
function CustomDifficultyToColor( sCustomDifficulty )
function PlayerScoreColor( pn )
return PlayerColor( pn );
end
function PlayerDarkColor( pn )
if pn == PLAYER_1 then return GameColor.PlayerDarkColors["PLAYER_1"] end
if pn == PLAYER_2 then return GameColor.PlayerDarkColors["PLAYER_2"] end
return color("1,1,1,1")
end
function CustomDifficultyToColor( sCustomDifficulty )
return GameColor.Difficulty[sCustomDifficulty]
end
@@ -402,4 +411,4 @@ function Alpha(color,percent)
end;
c.Alpha = percent;
return HSVToColor(c);
end;
end;
+8
View File
@@ -133,6 +133,14 @@ function Song:GetStageCost()
return self:IsMarathon() and 3 or self:IsLong() and 2 or 1
end
function OptionsNavigationMode()
if PREFSMAN:GetPreference("ThreeKeyNavigation") then
return "toggle"
else
return "normal"
end
end
-- (c) 2005 Chris Danford
-- All rights reserved.
--
-22
View File
@@ -10,28 +10,6 @@ function AreStageSongModsForced()
return GAMESTATE:IsAnExtraStage() or bOni or bBattle or bRave
end
local default_fail_applied= {}
function ResetDefaultFail()
default_fail_applied= {}
end
function SetFail()
local sFail = ""
if GetGamePref("DefaultFail") then
sFail = string.format("FailType_%s", GetGamePref("DefaultFail"))
else
sFail = "FailType_Off"
end
for pn in ivalues(GAMESTATE:GetHumanPlayers()) do
if not default_fail_applied[pn] then
GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Preferred"):FailSetting(sFail)
default_fail_applied[pn]= true
MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} )
end
end
end
function ScreenSelectMusic:setupmusicstagemods()
Trace( "setupmusicstagemods" )
local pm = GAMESTATE:GetPlayMode()
+5 -4
View File
@@ -82,16 +82,17 @@ ThemePrefs =
-- If we don't have IniFile, we can't read/write from/to disk
if not IniFile then Warn( GetString("IniFileMissing") ) end
Trace( ("ThemePrefs.Init(prefs, %s)"):format(tostring(bLoadFromDisk)) )
-- Trace( ("ThemePrefs.Init(prefs, %s)"):format(tostring(bLoadFromDisk)) )
if bLoadFromDisk then
Trace( "ThemePrefs.Init: loading from disk" )
if not ThemePrefs.Load() then return false end
end
Trace( "ThemePrefs.Init: not loading from disk" )
-- Trace( "ThemePrefs.Init: not loading from disk" )
-- create the section if it doesn't exist
local section = GetThemeName()
-- Trace( ("ThemePrefs.Init: Theme name is \"%s\""):format(section) )
PrefsTable[section] = PrefsTable[section] and PrefsTable[section] or { }
--Trace( "Using section " .. section )
@@ -104,7 +105,7 @@ ThemePrefs =
end
end
--PrintTable( PrefsTable[section] )
-- PrintTable( PrefsTable[section] )
end,
Load = function()
@@ -114,7 +115,7 @@ ThemePrefs =
end,
Save = function()
Trace( "ThemePrefs.Save" )
-- Trace( "ThemePrefs.Save" )
if not IniFile then return false end
if not NeedsSaved then return end
NeedsSaved = false
+10 -3
View File
@@ -210,6 +210,11 @@ function IsFreePlay()
return IsArcade() and (GAMESTATE:GetCoinMode() == 'CoinMode_Free') or false
end
function IsCourse()
local pm = GAMESTATE:GetPlayMode();
return pm == "PlayMode_Nonstop" or "PlayMode_Oni" or "PlayMode_Endless"
end
function ArgsIfPlayerJoinedOrNil(arg1,arg2)
if arg1==nil then arg1=arg2
elseif arg2==nil then arg2=arg1 end
@@ -429,10 +434,12 @@ function convert_text_to_indented_lines(text, indent, width, text_zoom)
if sub_lines > 0 then
indent_mult= 2
end
local usable_width= width - (indent * indent_mult)
if text:GetWidth() * text_zoom > usable_width * 2 then
-- On larger resolutions, the font can be squished a bit to fit more on a line.
local resolution_width_mult= math.max(1, DISPLAY:GetDisplayHeight() / 720)
local usable_width= (width - (indent * indent_mult)) * resolution_width_mult
if text:GetWidth() * text_zoom > usable_width then
clipped= true
width_clip_text(text, usable_width * 2)
width_clip_text(text, usable_width)
end
indented_lines[#indented_lines+1]= {
indent_mult, text:GetText()}
+16 -14
View File
@@ -439,21 +439,23 @@ function ArbitrarySpeedMods()
NumPlayers= 0 -- for ease when adjusting for the status elements.
}
for i, pn in ipairs(GAMESTATE:GetEnabledPlayers()) do
local poptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Preferred")
local speed= nil
local mode= nil
if poptions:MaxScrollBPM() > 0 then
mode= "m"
speed= math.round(poptions:MaxScrollBPM())
elseif poptions:TimeSpacing() > 0 then
mode= "C"
speed= math.round(poptions:ScrollBPM())
else
mode= "x"
speed= math.round(poptions:ScrollSpeed() * 100)
if GAMESTATE:IsHumanPlayer(pn) then
local poptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Preferred")
local speed= nil
local mode= nil
if poptions:MaxScrollBPM() > 0 then
mode= "m"
speed= math.round(poptions:MaxScrollBPM())
elseif poptions:TimeSpacing() > 0 then
mode= "C"
speed= math.round(poptions:ScrollBPM())
else
mode= "x"
speed= math.round(poptions:ScrollSpeed() * 100)
end
ret.CurValues[pn]= {mode= mode, speed= speed}
ret.NumPlayers= ret.NumPlayers + 1
end
ret.CurValues[pn]= {mode= mode, speed= speed}
ret.NumPlayers= ret.NumPlayers + 1
end
ret:GenChoices()
return ret
+4
View File
@@ -153,6 +153,10 @@ function FailCombo()
return ComboThresholds["default"].Fail
end
function TwoPartSelection()
return GAMESTATE:GetCurrentGame():GetName() == "pump" and true or false
end
local RoutineSkins = {
dance = { P1 = "midi-routine-p1", P2 = "midi-routine-p2" },
pump = { P1 = "cmd-routine-p1", P2 = "cmd-routine-p2" },

Some files were not shown because too many files have changed in this diff Show More