[default -> Xcode4] Lion is approaching.

This commit is contained in:
Jason Felds
2011-07-20 10:12:21 -04:00
400 changed files with 29179 additions and 6031 deletions
+8
View File
@@ -0,0 +1,8 @@
#COURSE:Jupiter;
#SCRIPTER:Midiman;
#GAINSECONDS:120;
#SONG:*:Hard;
#GAINSECONDS:25;
#SONG:*:Hard;
+7 -7
View File
@@ -39,17 +39,17 @@ WeightW2=30
WeightW1=50
[Skill5]
WeightMiss=
WeightW5=1
WeightW4=1
WeightMiss=2
WeightW5=3
WeightW4=5
WeightW3=5
WeightW2=30
WeightW1=55
[Skill6]
WeightMiss=
WeightW5=
WeightW4=
WeightMiss=2
WeightW5=3
WeightW4=5
WeightW3=5
WeightW2=30
WeightW1=70
WeightW1=55
+28
View File
@@ -9,6 +9,34 @@ change to JSON, but it is unsure if this will be done.
Implement .ssc at your own risk.
________________________________________________________________________________
[v0.77] - Wolfman2000
* Add the cache tag #STEPFILENAME to gain access to the proper #NOTES when
required.
[v0.76] - Wolfman2000
* Expand the #COMBOS tag to allow for Miss Combos. Anyone that is crazy enough
to put in a 51 miss combo in their tags should be...oh wait: it's already
been done.
[v0.75] - Wolfman2000
* Add Step based #DISPLAYBPM for those songs that have...very varied syncing.
[v0.74] - Wolfman2000
* Add #CHARTNAME tag for the title of the chart.
* Older files will have their #DESCRIPTION tag content copied to #CHARTNAME
on load.
[v0.73] - Wolfman2000
* Use #FIRSTSECOND, #LASTSECOND, and #LASTSECONDHINT instead of the BEAT
equivalents.
* Move #LASTSECONDHINT to after the Timing tags.
[v0.72] - Wolfman2000
* Have #OFFSET come before #ATTACKS in the Step data.
[v0.71] - Wolfman2000
* Have #ATTACKS work per step as well.
[v0.7] - theDtTvB, Wolfman2000
* Split Timing officially implemented.
* #SPEEDS tag for modified scroll speeds.
+247 -1
View File
@@ -5,9 +5,255 @@ from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
________________________________________________________________________________
================================================================================
StepMania 5.0 Preview 2 | 20110???
StepMania 5.0 ????????? | 20110???
--------------------------------------------------------------------------------
2011/07/19
----------
* [LoadingWindow] Added the ability for themes to have custom splash banners.
(Currently Windows-only.) [AJ]
2011/07/17
----------
* [Cache] No longer store #NOTES in the cache. This should speed things up
on the first load if there is not much to write. (General note: this was
taken from another branch, but results at that point were great.)
[Wolfman2000]
2011/07/13
----------
* [Difficulty] Allow ALL StepsTypes to use CustomDifficulty properly.
There was some unfair targeting of Couple and Routine. [Wolfman2000]
* [Steps] Calculate accurate radar values for Couple charts. [Wolfman2000]
* [ScreenEdit] Display more accurate chart data for Couple and Routine charts
for the future. No more having (almost) every row as a jump! [Wolfman2000]
2011/07/12
----------
* [OptionRowHandler] Add a new metric to ScreenOptionsMaster:
StepsUseChartName. Use this if you want your charts to have a unique name
in the options menu. If there is no #CHARTNAME or it is "Blank", it reverts
to the original behavior. This metric is false by default. [Wolfman2000]
* [ScreenEdit] Fixed a bug involving #ATTACKS. Now when you set an attack,
the mods are reverted back to how they were prior to the attack being set.
[Wolfman2000]
2011/07/09
----------
* [NotesTheUsual] Update the #COMBOS tag to allow for a Miss Combo attribute.
Any files that only use the Combo attribute will have that value copied to
miss combo on next launch. [Wolfman2000]
* [ScoreKeeperNormal] Better match #COMBOS with eval. Scoring formulas should
not be affected, but it may require more testing. [Wolfman2000]
* [Metrics] Have Pump mode lump the checkpoint judgments with Flawless and
Miss judgments on eval. Of course, this goes down to Perfect and Miss if
that is disabled. [Wolfman2000]
2011/07/07
----------
* [ScreenEdit] Fix the NoMines transformation bug, issue 363. [Wolfman2000]
* [CourseLoaderCRS] Don't load BEST# and WORST# where # is greater than the
number of songs installed. Fixes issue 373. [AJ]
* [NotesAllSSC] Add the #CHARTNAME tag to the Steps. #DESCRIPTION is now for
more detailed descriptions, or perhaps some short hand lingo. All files
that used #DESCRIPTION will have their values moved to #CHARTNAME on
load. [Wolfman2000]
* [ScreenEdit] Add a Steps Data menu for getting numerical step data on the
chart. This is a read only menu. Edit Steps Information contains writable
information. [Wolfman2000]
* [NotesAllSSC] Add the Steps version of #DISPLAYBPM. The Song version is
still there, so themes should not have to worry about breakage.
[Wolfman2000]
2011/07/06
----------
* [ScreenEdit] Fix the bug where hitting Enter during playing wouldn't take
the user back to the editor. [Wolfman2000]
* [Gameplay] Fix Fail mods being dishonored. [Midiman]
2011/07/05
----------
* [ScreenEdit] Restore dance-couple and pump-couple for editing purposes.
Saving should still work, but this was never tested yet. [Wolfman2000]
* [ScreenOptions] Mini is now ITG Mini, and Tiny is now Pump Pro Mini.
This will prevent many prior courses from breaking. [sharksoda, Wolfman2000]
* [CharacterManager] Add a lua function to check how many characters you have.
For an example of how this is used, check the default theme's scripts
folder, specifically 03 ThemePrefs.lua. [Wolfman2000]
2011/07/04
----------
* [ScreenEdit] Add a function to switch the notes the routine players have to
hit. In simple terms, Player 1's notes are now Player 2's and vice~versa.
Check it out in the Alter Menu. [Wolfman2000]
* [ScreenEdit] Add two routine mirroring functions. Now you can build sections
of a chart for one player, and mirror the effect for the other player when
finished. For Pump players, it is not a straight mirror, but is more akin
to what is found via normal routine charts. In other words, you'll be happy.
Check it out in the Alter Menu. [Wolfman2000]
2011/07/03
----------
* [ScreenEdit] Fix a crash if one tries to remove an attack that doesn't
exist at that time. [Wolfman2000]
================================================================================
StepMania 5.0 Preview 2 | 20110703
--------------------------------------------------------------------------------
2011/07/03
----------
* [Player] Bring mMods from OpenITG over. Also, a metric was added,
"MModHighCap", to cap the speed mod if required for playing songs like
Tsuhsuixamush. Set the metric to 0 or less to remove the cap. [AJ, sharksoda,
Wolfman2000]
2011/07/02
----------
* [ScreenEdit] Fixed a crash when hitting Enter in the F1 help menu. [AJ]
2011/06/30
----------
* [NotesAll] Use #FIRSTSECOND, #LASTSECOND, and #LASTSECONDHINT instead of the
former BEAT equivalents. Split Timing has made this a necessity thanks to
certain files that abuse Stops/Delays more than usual. [Wolfman2000]
* [ScreenEdit] Add a function in the Area Menu to designate the current beat
as the last second of the song. Please try to be smart and not use this too
early. [Wolfman2000]
2011/06/28
----------
* [ScreenEdit] Add a function to copy/paste the TimingData of a player's
choice. Remember to be in the appropriate mode when copying and pasting.
By default, the song timing is already located in the clipboard, ready for
use. [Wolfman2000]
2011/06/27
----------
* [Steps] Make sure #ATTACKS are copied when requested. [Wolfman2000]
* [ScreenEdit] Have Step Author up front instead of Chart Style. This is
probably going to be better overall. [Wolfman2000]
* [TimingData] Preserve the length of time for Speed Segment scaling when using
beats. [Wolfman2000]
* [NotesLoader/WriterSSC] #OFFSET is to be before #ATTACKS. This is required if
we pursue beat based attacks and not just second based. [Wolfman2000]
2011/06/26
----------
* [UnlockManager] New metric: AutoLockEditSteps. Use this to hide bonus charts
until the Expert steps are beaten. No guarantee that this works with no
challenge steps in the song. This defaults to false. [Wolfman2000]
* [UnlockManager] New metric: SongsNotAdditional. Set to true to keep the
default behavior, false to have the AdditionalSongs folder contain
unlockable material. This is set to true to start. [Wolfman2000]
* [ScreenEdit] Allow jumping between all segments, not just Label segments.
You still use Ctrl + ,/. to jump, but now you use Ctrl + N/M to cycle the
segments. By default, it starts with Label. [Wolfman2000]
* [PlayerOptions] No longer display StepAttacks in the player's list.
Instead, show NoAttacks if attacks are disabled. [Wolfman2000]
2011/06/24
----------
* [Actor] Implement compound(length,tweens) in _fallback/02 Actor.lua. [AJ]
* [UnlockManager] Add a new unlock reward: StepsType. This is similar to
unlocking Steps, but it is targeted for one step in one stepstype rather
than one step in all stepstypes. This needs testing. [Wolfman2000]
* [ScreenEdit] Add the option to convert delays to beats. Just find a better
song to use this on besides Uprock. [Wolfman2000]
* [ScreenEdit] Fix a crash if you don't save any steps on a new song.
[Wolfman2000]
* [NotesLoader/WriterSSC] Add support for Step #ATTACKS. Furthermore, Song
Attacks (or rather, Step Attacks as it should be called now) are turned on
by default instead of off. [Wolfman2000]
2011/06/19
----------
* [EditMenu] Allow all songs to work in Practice Mode, regardless of folder
location. This fixes a crash if everyone had songs in AdditionalSongs.
[Wolfman2000]
2011/06/17
----------
* [LifeMeterBattery] Fixed a bug where MinesSubtractLives was not being honored.
Also added LifeChanged message to changing of life on holds. [AJ]
2011/06/15
----------
* [TimingData] Added many lua bindings for the other timing segments. GetWarps,
GetCombos, GetTimeSignatures, GetTickcounts, GetFakes, GetScrolls, GetSpeeds.
This should cover all of them now. [Wolfman2000]
2011/06/13
----------
* [InputHandler_DirectInput] Fixed MouseWheel input not resetting. [AJ]
* [ScreenTextEntry] Make it so only the keyboard's Enter key can finish the
screen. Should fix issues with buttons whose secondary function is MenuStart. [AJ]
* [InputMapper] Modify default mappings. Use the Hyphen key instead of the
Numlock key for Player 2's GAME_BUTTON_BACK. This should address some
issues with Player 2 being unable to back out if they use a laptop.
[Wolfman2000]
* [NoteDisplay] Add two new metrics.
* DrawRollHeadForTapsOnSameRow: bool, similar to DrawHoldHeadForTapsOnSameRow
* TapHoldRollOnRowMeansHold: bool, true means hold and false means roll
* No noteskins should require updating, as these were placed in common/common
for ease of use. [Wolfman2000]
* [LifeMeterBattery] Added ChangeLives(int) Lua binding. [AJ]
* [LifeMeterBattery] Added DangerThreshold metric. [AJ]
* [LifeMeterBattery] Added some important metrics. [AJ]
* MinScoreToKeepLife='TapNoteScore_*' - any score below this = loss of life.
* SubtractLives=1 - how many lives are lost when going below MinScoreToKeepLife.
* MinesSubtractLives=1 - how many lives are lost when hitting a mine.
* HeldAddLives=0 - how many lives are gained when a hold is completed.
* LetGoSubtractLives=1 - how many lives are lost on a dropped hold.
2011/06/12
----------
* [ScreenNetSelectMusic] Add PlayerOptionsScreen metric. [AJ]
* [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]
2011/06/11
----------
* [ScreenEdit] Allow setting the Music Preview via the Alter Menu. Just select
your area, enter the menu, and choose "Designate as Music Preview". No more
math calculations needed! [Wolfman2000]
* [SongUtil] Added GetPlayableSteps(Song) Lua binding. [AJ]
* [Steps] Allow 255 characters for all chart descriptions, including edits.
We are no longer bound by In The Groove I think. [Wolfman2000]
* [Player] Add GetPlayerTimingData() Lua binding. [Wolfman2000]
2011/06/10
----------
* [ScreenEdit] Split the Area Menu into the Area Menu and Alter Menu. Use the
"A" key to enter the Alter Menu when a selection of notes/rows are
highlighted. Use the Enter key to enter the old Area Menu for the options that
do not depend on selecting NoteData. [Wolfman2000]
* [ScreenEdit] Allow converting selections to Delays, Warps, or Fakes as well
as Stops. Remember, use the Alter Menu for this. [Wolfman2000]
2011/06/09
----------
* [ScreenSyncOverlay] Ensure that F11 / F12 work with all charts due to Split
Timing. [Wolfman2000]
2011/06/08
----------
* Any notes in a fake segment or warp segment are completely ignored for
scoring purposes. Now you can get 100% on your warping goodness!
[Wolfman2000]
2011/06/06
----------
* [PlayerOptions] Removed the ScoreDisplay mod choices. Use lua to make your
own scoring formulas that work in reverse instead. [Wolfman2000]
* [ScreenGameplay] Fix an assist tick bug if there was no Player 1. Note that
this changes the behavior slightly: it is the first enabled player, or
master player, that gets the ticks now. A better solution will be looked at
in the future. [Wolfman2000]
* [NoteDataUtil] Fix a radar issue involving hands. Unfortunately, this means
yet another cache reload for accuracy purposes. [Wolfman2000]
2011/06/04
----------
* Changed default MusicWheelSwitchSpeed to 15 (was 10). [AJ]
+85 -8
View File
@@ -3,6 +3,7 @@
<Lua xmlns='http://www.stepmania.com' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.stepmania.com Lua.xsd'>
<GlobalFunctions>
<Function name='Alpha'/>
<Function name='AreStagePlayerModsForced'/>
<Function name='AreStageSongModsForced'/>
<Function name='Basename'/>
@@ -39,11 +40,8 @@
<Function name='FormatNumberAndSuffix'/>
<Function name='FormatPercentScore'/>
<Function name='GameCompatibleModes'/>
<Function name='GamePrefAutoSetStyle'/>
<Function name='GamePrefComboOnRolls'/>
<Function name='GamePrefComboUnderField'/>
<Function name='GamePrefDefaultFail'/>
<Function name='GamePrefNotePosition'/>
<Function name='GetCoursesToShowRanking'/>
<Function name='GetCustomDifficulty'/>
<Function name='GetDefaultOptionLines'/>
@@ -57,6 +55,7 @@
<Function name='GetGradeFromPercent'/>
<Function name='GetLifeDifficulty'/>
<Function name='GetOSName'/>
<Function name='GetPlayerOrMachineProfile'/>
<Function name='GetProTiming'/>
<Function name='GetRandomSongBackground'/>
<Function name='GetReal'/>
@@ -130,7 +129,6 @@
<Function name='PrintTable'/>
<Function name='ProductID'/>
<Function name='ProductVersion'/>
<Function name='Profile'/>
<Function name='RadarCategoryToLocalizedString'/>
<Function name='ReadGamePrefFromFile'/>
<Function name='ReadPrefFromFile'/>
@@ -143,6 +141,8 @@
<Function name='Saturation'/>
<Function name='ScoreKeeperClass'/>
<Function name='ScoreMissedHoldsAndRolls'/>
<Function name='ScreenMetric'/>
<Function name='ScreenString'/>
<Function name='Second'/>
<Function name='SecondsToHHMMSS'/>
<Function name='SecondsToMMSS'/>
@@ -153,6 +153,7 @@
<Function name='SelectMusicOrCourse'/>
<Function name='SelectProfileKeys'/>
<Function name='Serialize'/>
<Function name='SetFail'/>
<Function name='SetGamePref'/>
<Function name='SetThemePref'/>
<Function name='SetUserPref'/>
@@ -322,6 +323,7 @@
<Function name='bouncebegin'/>
<Function name='bounceend'/>
<Function name='clearzbuffer'/>
<Function name='compound'/>
<Function name='cropbottom'/>
<Function name='cropleft'/>
<Function name='cropright'/>
@@ -578,6 +580,7 @@
<Function name='GetAllCharacters'/>
<Function name='GetCharacter'/>
<Function name='GetRandomCharacter'/>
<Function name='GetCharacterCount'/>
</Class>
<Class base='ActorFrame' name='ComboGraph'>
<Function name='Load'/>
@@ -823,6 +826,7 @@
<Function name='IsInDanger'/>
</Class>
<Class base='LifeMeter' name='LifeMeterBattery'>
<Function name='ChangeLives'/>
<Function name='GetLivesLeft'/>
<Function name='GetTotalLives'/>
</Class>
@@ -889,6 +893,7 @@
<Function name='LoadFromStats'/>
</Class>
<Class base='ActorFrame' name='Player'>
<Function name='GetPlayerTimingData'/>
<Function name='SetActorWithComboPosition'/>
<Function name='SetActorWithJudgmentPosition'/>
</Class>
@@ -929,6 +934,7 @@
<Function name='GetMines'/>
<Function name='GetMini'/>
<Function name='GetMirror'/>
<Function name='GetNoAttacks'/>
<Function name='GetNoFakes'/>
<Function name='GetNoHands'/>
<Function name='GetNoHolds'/>
@@ -956,6 +962,7 @@
<Function name='GetSongAttacks'/>
<Function name='GetSplit'/>
<Function name='GetStealth'/>
<Function name='GetStepAttacks'/>
<Function name='GetStomp'/>
<Function name='GetSudden'/>
<Function name='GetSuddenOffset'/>
@@ -1026,6 +1033,52 @@
<Function name='SetPreference'/>
<Function name='SetPreferenceToDefault'/>
</Class>
<Class name='Profile'>
<Function name='GetCaloriesBurnedToday'/>
<Function name='GetCharacter'/>
<Function name='GetCoursesActual'/>
<Function name='GetCoursesPercentComplete'/>
<Function name='GetCoursesPossible'/>
<Function name='GetDisplayName'/>
<Function name='GetDisplayTotalCaloriesBurned'/>
<Function name='GetGoalCalories'/>
<Function name='GetGoalSeconds'/>
<Function name='GetGoalType'/>
<Function name='GetHighScoreList'/>
<Function name='GetLastUsedHighScoreName'/>
<Function name='GetMostPopularCourse'/>
<Function name='GetMostPopularSong'/>
<Function name='GetNumToasties'/>
<Function name='GetNumTotalSongsPlayed'/>
<Function name='GetSongNumTimesPlayed'/>
<Function name='GetSongsActual'/>
<Function name='GetSongsAndCoursesPercentCompleteAllDifficulties'/>
<Function name='GetSongsPercentComplete'/>
<Function name='GetSongsPossible'/>
<Function name='GetTotalCaloriesBurned'/>
<Function name='GetTotalGameplaySeconds'/>
<Function name='GetTotalHands'/>
<Function name='GetTotalHolds'/>
<Function name='GetTotalJumps'/>
<Function name='GetTotalLifts'/>
<Function name='GetTotalMines'/>
<Function name='GetTotalNumSongsPlayed'/>
<Function name='GetTotalRolls'/>
<Function name='GetTotalSessionSeconds'/>
<Function name='GetTotalSessions'/>
<Function name='GetTotalStepsWithTopGrade'/>
<Function name='GetTotalTapsAndHolds'/>
<Function name='GetTotalTrailsWithTopGrade'/>
<Function name='GetUserData'/>
<Function name='GetWeightPounds'/>
<Function name='HasPassedAnyStepsInSong'/>
<Function name='IsCodeUnlocked'/>
<Function name='SetCharacter'/>
<Function name='SetGoalCalories'/>
<Function name='SetGoalSeconds'/>
<Function name='SetGoalType'/>
<Function name='SetWeightPounds'/>
</Class>
<Class name='ProfileManager'>
<Function name='GetLocalProfile'/>
<Function name='GetLocalProfileFromIndex'/>
@@ -1093,6 +1146,15 @@
</Class>
<Class base='BitmapText' name='ScoreDisplayAliveTime'/>
<Class base='BitmapText' name='ScoreDisplayCalories'/>
<Class base='ActorFrame' name='Screen'>
<Function name='GetNextScreenName'/>
<Function name='GetPrevScreenName'/>
<Function name='GetScreenType'/>
<Function name='Metric'/>
<Function name='PostScreenMessage'/>
<Function name='String'/>
<Function name='lockinput'/>
</Class>
<Class base='ScreenWithMenuElements' name='ScreenAttract'/>
<Class base='ScreenWithMenuElements' name='ScreenEdit'>
<Function name='GetEditState'/>
@@ -1185,9 +1247,11 @@
<Function name='GetDisplayMainTitle'/>
<Function name='GetDisplaySubTitle'/>
<Function name='GetFirstBeat'/>
<Function name='GetFirstSecond'/>
<Function name='GetGenre'/>
<Function name='GetGroupName'/>
<Function name='GetLastBeat'/>
<Function name='GetLastSecond'/>
<Function name='GetLyricsPath'/>
<Function name='GetMusicPath'/>
<Function name='GetOneSteps'/>
@@ -1318,6 +1382,7 @@
</Class>
<Class name='Steps'>
<Function name='GetAuthorCredit'/>
<Function name='GetChartName'/>
<Function name='GetChartStyle'/>
<Function name='GetDescription'/>
<Function name='GetDifficulty'/>
@@ -1327,6 +1392,7 @@
<Function name='GetRadarValues'/>
<Function name='GetStepsType'/>
<Function name='GetTimingData'/>
<Function name='HasAttacks'/>
<Function name='HasSignificantTimingChanges'/>
<Function name='IsAPlayerEdit'/>
<Function name='IsAnEdit'/>
@@ -1377,10 +1443,17 @@
<Function name='GetBPMs'/>
<Function name='GetBPMsAndTimes'/>
<Function name='GetBeatFromElapsedTime'/>
<Function name='GetCombos'/>
<Function name='GetDelays'/>
<Function name='GetElapsedTimeFromBeat'/>
<Function name='GetFakes'/>
<Function name='GetLabels'/>
<Function name='GetScrolls'/>
<Function name='GetSpeeds'/>
<Function name='GetStops'/>
<Function name='GetTickcounts'/>
<Function name='GetTimeSignatures'/>
<Function name='GetWarps'/>
<Function name='HasBPMChanges'/>
<Function name='HasFakes'/>
<Function name='HasNegativeBPMs'/>
@@ -1408,6 +1481,7 @@
<Function name='GetCode'/>
<Function name='GetCourse'/>
<Function name='GetDescription'/>
<Function name='GetRequirePassChallengeSteps'/>
<Function name='GetRequirePassHardSteps'/>
<Function name='GetRequirement'/>
<Function name='GetSong'/>
@@ -1421,6 +1495,7 @@
<Function name='roulette'/>
<Function name='song'/>
<Function name='steps'/>
<Function name='steps_type'/>
</Class>
<Class name='UnlockManager'>
<Function name='AnyUnlocksToCelebrate'/>
@@ -1470,6 +1545,7 @@
<Function name='GetCreditsMessage'/>
</Namespace>
<Namespace name='SongUtil'>
<Function name='GetPlayableSteps'/>
<Function name='IsStepsPlayable'/>
<Function name='IsStepsTypePlayable'/>
</Namespace>
@@ -2024,8 +2100,9 @@
<Enum name='UnlockRewardType'>
<EnumValue name='&apos;UnlockRewardType_Song&apos;' value='0'/>
<EnumValue name='&apos;UnlockRewardType_Steps&apos;' value='1'/>
<EnumValue name='&apos;UnlockRewardType_Course&apos;' value='2'/>
<EnumValue name='&apos;UnlockRewardType_Modifier&apos;' value='3'/>
<EnumValue name='&apos;UnlockRewardType_StepsType&apos;' value='2'/>
<EnumValue name='&apos;UnlockRewardType_Course&apos;' value='3'/>
<EnumValue name='&apos;UnlockRewardType_Modifier&apos;' value='4'/>
</Enum>
<Enum name='VertAlign'>
<EnumValue name='&apos;VertAlign_Top&apos;' value='0'/>
@@ -2060,6 +2137,6 @@
<Constant name='sGame' value='&apos;dance&apos;'/>
<Constant name='top' value='&apos;VertAlign_Top&apos;'/>
</Constants>
<Version>StepMania 5 v5.0 Preview 1a</Version>
<Date>2011-06-04</Date>
<Version>StepMania 5 v5.0 Preview 2</Version>
<Date>2011-07-04</Date>
</Lua>
+7 -1
View File
@@ -395,7 +395,13 @@
$type='bool' or
$type='table' or
$type='color' or
$type='Enum'">
$type='Enum' or
$type='ThreadVariable' or
$type='LuaOptionRow' or
$type='ActorDef' or
$type='chunk' or
$type='unsigned' or
$type='various'">
<span class="primitiveType">
<xsl:value-of select="$type" />
</span>
+318 -27
View File
@@ -23,6 +23,9 @@
<Documentation xmlns='http://www.stepmania.com' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.stepmania.com Lua.xsd'>
<!-- Global functions -->
<GlobalFunctions>
<Function name='Alpha' theme='_fallback' return='color' arguments='color c, float percent'>
[03 HSV.lua] Returns a <code>color</code> with the specified alpha.
</Function>
<Function name='AreStagePlayerModsForced' theme='_fallback' return='bool' arguments=''>
[02 StageMods.lua]
</Function>
@@ -36,10 +39,10 @@
Returns the base name of file path.
</Function>
<Function name='BoostColor' theme='_fallback' return='color' arguments='color c, float fBoost'>
[02 Colors.lua]
[02 Colors.lua] Boosts the specified color by multiplying its values by <code>fBoost</code>.
</Function>
<Function name='Brightness' theme='_fallback' return='color' arguments='color c, float percent'>
[03 HSV.lua]
[03 HSV.lua] Modifies the brightness of the specified color.
</Function>
<Function name='Center1Player' theme='_fallback' return='bool' arguments=''>
[03 ProductivityHelpers.lua] Returns <code>true</code> if Center 1P is being used.
@@ -48,7 +51,8 @@
[03 Gameplay.lua]
</Function>
<Function name='clamp' return='float' arguments='float fValue, float fLow, float fHigh'>
CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s. Erm, I mean... Clamps <code>fValue</code> between <code>fLow</code> and <code>fHigh</code>.
CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s.
Erm, I mean... Clamps <code>fValue</code> between <code>fLow</code> and <code>fHigh</code>.
</Function>
<Function name='CloseConnection' return='void' arguments=''>
Closes any connection to an online server.
@@ -59,6 +63,21 @@
<Function name='color' return='color' arguments='string color'>
Returns a color from a string. <code>color</code> can be in hex (<code>"#FFFFFFFF"</code>) or 0..1 values (<code>"1.0,1.0,1.0,1.0"</code>), in RGBA order.
</Function>
<Function name='ColorDarkTone' theme='_fallback' return='' arguments='color c'>
[02 Colors.lua] Returns a darker tone of the color. (Specifically <code>c[1]/2, c[2]/2, c[3]/2, c[4]</code>)
</Function>
<Function name='ColorLightTone' theme='_fallback' return='' arguments='color c'>
[02 Colors.lua] Returns a lighter tone of the color. (Specifically <code>c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4]</code>)
</Function>
<Function name='ColorMidTone' theme='_fallback' return='' arguments='color c'>
[02 Colors.lua] Returns a midtone of the color. (Specifically <code>c[1]/1.5, c[2]/1.5, c[3]/1.5, c[4]</code>)
</Function>
<Function name='ColorToHex' theme='_fallback' return='string' arguments='color c'>
[03 HSV.lua] Returns a hex representation for the specified color.
</Function>
<Function name='ColorToHSV' theme='_fallback' return='table' arguments='color c'>
[03 HSV.lua] Takes in a color and returns a table with the HSV values.
</Function>
<Function name='ComboContinue' theme='_fallback' return='TapNoteScore' arguments=''>
[03 Gameplay.lua] Determines what TapNoteScore allows for continuing the combo.
</Function>
@@ -68,6 +87,12 @@
<Function name='ComboPerRow' theme='_fallback' return='bool' arguments=''>
[03 Gameplay.lua] Determines if combo should be per row (Jump = 1) or per column (Jump = 2).
</Function>
<Function name='ComboTransformCommand' theme='_fallback' return='void' arguments='Actor self, params p'>
[02 Other.lua] The combo trasform command.
</Function>
<Function name='ComboUnderField' theme='_fallback' return='bool' arguments=''>
[03 Gameplay.lua] Returns the <code>UserPrefComboUnderField</code> user preference value.
</Function>
<Function name='ConnectToServer' return='bool' arguments='string sAddress'>
Tries to connect to the server at <code>sAddress</code>.
</Function>
@@ -77,14 +102,23 @@
<Function name='DayOfYear' return='int' arguments=''>
Returns the current day of the year.
</Function>
<Function name='DeepCopy' theme='_fallback' return='table' arguments='table from, table to, table already_copied'>
[02 Serialize] Recursively deep-copy a table.
</Function>
<Function name='dofile' theme='_fallback' return='chunk' arguments='string sFilePath'>
[01 base.lua] "Override Lua's dofile to use our <Link function="loadfile">loadfile</Link>."
</Function>
<Function name='fapproach' theme='_fallback' return='float' arguments='float val, float other_val, float to_move'>
[02 Utilities.lua]
</Function>
<Function name='FindSelection' theme='_fallback' return='int' arguments='table list'>
[02 Utilities.lua] Return the index of a true value in <code>list</code>.
</Function>
<Function name='FindValue' theme='_fallback' return='string' arguments='table tab, various value'>
[02 Utilities.lua] Find a key in <code>tab</code> with the given <code>value</code>.
</Function>
<Function name='FindSelection' theme='_fallback' return='int' arguments='table list'>
[02 Utilities.lua] Return the index of a true value in <code>list</code>.
<Function name='foreach_ordered' theme='_fallback' return='void' arguments='table t, function f'>
<code>func</code> takes a key and a value.
</Function>
<Function name='FormatNumberAndSuffix' return='string' arguments='int num'>
Returns the number passed to the function followed by its suffix (&quot;th&quot;, &quot;nd&quot;, and so on).
@@ -98,6 +132,12 @@
<Function name='GetCustomDifficulty' return='string' arguments='StepsType st, Difficulty d, CourseType ct'>
Returns the corresponding CustomDifficulty string for a StepsType/Difficulty (/optional CourseType) combination.
</Function>
<Function name='GetDirectRadar' theme='_fallback' return='RadarValues' arguments='PlayerNumber pn'>
[04 Scoring.lua] "Get the radar values directly. The individual steps aren't used much."
</Function>
<Function name='GetEditModeSubScreens' theme='_fallback' return='string' arguments=''>
[02 Other.lua] Returns a string with the Edit Mode SubScreens.
</Function>
<Function name='getenv' theme='_fallback' return='various' arguments='string name'>
[03 EnvUtils2.lua] Returns the value of <code>name</code> from the Env table.
</Function>
@@ -113,21 +153,45 @@
<Function name='GetOSName' return='string' arguments=''>
Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown")
</Function>
<Function name='GetPlayerOrMachineProfile' theme='_fallback' return='Profile' arguments='PlayerNumber pn'>
[03 ProductivityHelpers.lua] "This returns a profile, preferably a player one. If there isn't one, [it falls] back on the machine profile."
</Function>
<Function name='GetProTiming' theme='default' return='bool' arguments='PlayerNumber pn'>
[03 ThemePrefs.lua] Returns <code>true</code> if player <code>pn</code> is using ProTiming.
</Function>
<Function name='GetRandomSongBackground' theme='_fallback' return='string' arguments=''>
[02 Utilities.lua] Returns a path to a random song background.
</Function>
<Function name='GetReal' theme="_fallback" return='float' arguments=''>
[03 ProductivityHelpers.lua]
</Function>
<Function name='GetRealInverse' theme="_fallback" return='float' arguments=''>
[03 ProductivityHelpers.lua]
</Function>
<Function name='GetScreenAspectRatio' return='float' arguments=''>
Returns the display aspect ratio.
</Function>
<Function name='GetServerName' return='string' arguments=''>
Returns the name of the currently connected server.
</Function>
<Function name='GetSongBackground' theme='_fallback' return='string' arguments=''>
[02 Utilities.lua] Returns a path to the current songs background.
</Function>
<Function name='GetTapPosition' theme='_fallback' return='float' arguments=''>
[03 Gameplay.lua]
</Function>
<Function name='GetThemeAspectRatio' return='float' arguments=''>
Returns the theme's aspect ratio.
</Function>
<Function name='GetThemePref' theme='_fallback' return='' arguments=''>
[03 ThemePrefs.lua] (Alias for <Link class='ThemePrefs' function='Get' />.)
</Function>
<Function name='GetTimingDifficulty' return='int' arguments=''>
Returns the current Timing difficulty.
</Function>
<Function name='GetTotalItems' theme='_fallback' return='float' arguments='RadarValues radars'>
[04 Scoring.lua] "Retrieve the amount of taps/holds/rolls involved." Used in some scoring formulas.
</Function>
<Function name='GetUserPref' theme='_fallback' return='string' arguments='string name'>
[03 UserPreferences2.lua] Themer-facing function for getting a user preference.
</Function>
@@ -140,9 +204,38 @@
<Function name='GetUserPrefN' theme='_fallback' return='float' arguments='string name'>
[03 UserPreferences2.lua] Themer-facing function for getting a user preference as a number.
</Function>
<Function name='HasAlpha' theme='_fallback' return='float' arguments='color c'>
[03 HSV.lua] Returns the color's alpha if it has any, otherwise returns 1.
</Function>
<Function name='HitCombo' theme='_fallback' return='int' arguments=''>
[03 Gameplay.lua] Returns the value to start showing the combo at.
</Function>
<Function name='HoldHeadStep' theme='_fallback' return='bool' arguments=''>
[03 Gameplay.lua] Returns <code>true</code> if you need to step on hold heads to activate them.
</Function>
<Function name='HoldTiming' theme='_fallback' return='float' arguments=''>
[03 Gameplay.lua] Returns 0 in <code>pump</code> mode, <code>TimingWindowSecondsHold</code> preference value in any other game mode.
</Function>
<Function name='Hour' return='int' arguments=''>
Returns the current hour.
</Function>
<Function name='HSV' theme='_fallback' return='color' arguments='float h, float s, float v'>
[03 HSV.lua] Converts a color from HSV values to something StepMania can understand.
hue is from <code>0-360</code>, saturation and value are <code>0..1</code>
</Function>
<Function name='HSVA' theme='_fallback' return='color' arguments='float h, float s, float v, float a'>
[03 HSV.lua] Converts a color from HSV values with alpha to something StepMania can understand.
hue is from <code>0-360</code>, saturation, value, and alpha are <code>0..1</code>
</Function>
<Function name='HSVToColor' theme='_fallback' return='color' arguments='table hsv'>
[03 HSV.lua] "Converts a set of HSV values to a color."
</Function>
<Function name='HSVToHex' theme='_fallback' return='string' arguments='table hsv'>
[03 HSV.lua] "Takes in a normal color and returns the hex representation. (Adapted from code in LuaBit)"
</Function>
<Function name='Hue' theme='_fallback' return='color' arguments='color c, int newHue'>
[03 HSV.lua] Changes the hue of the input color.
</Function>
<Function name='InitUserPrefs' theme='default' return='void' arguments=''>
[03 ThemePrefs.lua] Initializes various user preferences.
</Function>
@@ -206,6 +299,12 @@
<Function name='Minute' return='int' arguments=''>
Returns the current Minute.
</Function>
<Function name='MissCombo' theme='_fallback' return='int' arguments=''>
[03 Gameplay.lua] Returns the value to start showing the miss combo at.
</Function>
<Function name='module' return='' arguments='string name, ...'>
Creates a module. See the Lua manual for more details.
</Function>
<Function name='MonthOfYear' return='int' arguments=''>
Returns the current month of the year.
</Function>
@@ -215,6 +314,20 @@
<Function name='MonthToString' return='string' arguments='Month m'>
Returns Month <code>m</code> as a string.
</Function>
<Function name='next' return='' arguments='table t, int index'>
"Allows a program to traverse all fields of a table. Its first argument is a
table and its second argument is an index in this table.
<code>next</code> returns the next index of the table and its associated value."
See the Lua manual for more details.
</Function>
<Function name='OptionRowProTiming' theme='default' return='LuaOptionRow' arguments=''>
[03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
</Function>
<Function name='pairs' return='' arguments='table t'>
"Returns three values: the <Link class='GLOBAL' function='next' /> function, the table <code>t</code>, and <code>nil</code>,
so that the construction <code>for k,v in pairs(t) do body end</code>
will iterate over all keyvalue pairs of table <code>t</code>."
</Function>
<Function name='pname' theme='_fallback' return='string' arguments='PlayerNumber pn'>
[03 ProductivityHelpers.lua] Converts a PlayerNumber into a short string (e.g. "P1", "P2").
</Function>
@@ -233,6 +346,16 @@
<Function name='ProductVersion' return='string' arguments=''>
Returns the product version.
</Function>
<Function name='rawequal' return='bool' arguments='various v1, varoius v2'>
"Checks whether <code>v1</code> is equal to <code>v2</code>, without invoking any metamethod."
</Function>
<Function name='rawget' return='various' arguments='table t, various index'>
"Gets the real value of <code>t[index]</code>, without invoking any metamethod."
</Function>
<Function name='rawset' return='table' arguments='table t, int index, various value'>
"Sets the real value of <code>t[index]</code> to <code>value</code>, without invoking any metamethod."
The modified <code>t</code> is then returned.
</Function>
<Function name='ResolveRelativePath' theme='_fallback' return='string' arguments='string path, int level'>
[02 ActorDef.lua]
</Function>
@@ -242,12 +365,27 @@
<Function name='ReadPrefFromFile' theme='_fallback' return='string' arguments='string prefName'>
[03 UserPreferences2.lua] (internal) Reads the specified user preference from its config file.
</Function>
<Function name='ReportStyle' return='void' arguments=''>
Sends the current style to the server.
</Function>
<Function name='require' return='' arguments='string modname'>
Loads the specified module. See the Lua manual for more information.
</Function>
<Function name='round' theme='_fallback' return='int' arguments='float val, int decimal'>
[02 Utilities.lua] Round a number.
</Function>
<Function name='Saturation' theme='_fallback' return='color' arguments='color c, float percent'>
[03 HSV.lua] Modifies the saturation of the specified color
</Function>
<Function name='ScoreKeeperClass' theme='_fallback' return='string' arguments=''>
[03 Gameplay.lua] Returns the primary ScoreKeeper class to use.
</Function>
<Function name='ScreenMetric' theme='_fallback' return='string' arguments='string s'>
[00 alias.lua, 02 Other.lua] alias for <Link class='Screen' function='Metric' />.
</Function>
<Function name='ScreenString' theme='_fallback' return='string' arguments='string s'>
[00 alias.lua, 02 Other.lua] alias for <Link class='Screen' function='String' />.
</Function>
<Function name='Second' return='int' arguments=''>
Returns the current second.
</Function>
@@ -269,12 +407,20 @@
<Function name='SecondsToMMSSMsMsMs' return='string' arguments='float fSecs'>
Converts <code>fSecs</code> to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3).
</Function>
<Function name='select' return='various' arguments='various index, ...'>
"If <code>index</code> is a number, returns all arguments after argument
number <code>index</code>. Otherwise, <code>index</code> must be the string
<code>"#"</code>, and [it] returns the total number of extra arguments it received."
</Function>
<Function name='SelectMusicOrCourse' theme='_fallback' return='string' arguments=''>
[02 Branches.lua] Determines the correct music/course selection screen to use and returns it.
</Function>
<Function name='SelectProfileKeys' theme='_fallback' return='string' arguments=''>
[03 Gameplay.lua] (soon to be deprecated) Returns a list of codes to use on ScreenSelectProfile.
</Function>
<Function name='Serialize' return='string' arguments='table t'>
[02 Serialize.lua] Serialize the table <code>t</code>.
</Function>
<Function name='setenv' theme='_fallback' return='various' arguments='string name, various value'>
[03 EnvUtils2.lua] Sets the value of <code>name</code> to <code>value</code> in the Env table.
</Function>
@@ -299,6 +445,12 @@
<Function name='StandardDecorationFromFileOptional' theme='_fallback' return='Actor' arguments='string sMetricsName, string sFileName'>
[02 ActorDef.lua]
</Function>
<Function name='tableshuffle' theme='_fallback' return='table' arguments='table t'>
[02 Utilities.lua] Returns a shuffled version of <code>t</code>.
</Function>
<Function name='tableslice' theme='_fallback' return='table' arguments='table t, int num'>
[02 Utilities.lua] Returns a slice of the specified table of size <code>num</code>.
</Function>
<Function name='TableStringLookup' theme='_fallback' return='table' arguments='table t, string group'>
[02 Utilities.lua] Look up each value in a table, returning a table with the resulting strings.
</Function>
@@ -308,42 +460,64 @@
<Function name='tobool' theme='_fallback' return='bool' arguments='various v'>
[03 ProductivityHelpers.lua] Converts a string or number to a bool.
</Function>
<Function name='tonumber' return='float' arguments='various e, int base'>
Tries to convert <code>e</code> to a number. Returns <code>nil</code> if
it can't convert the input to a number. (<code>base</code> is optional.)
</Function>
<Function name='tostring' return='string' arguments='various e'>
Converts <code>e</code> to a string.
</Function>
<Function name='ToEnumShortString' theme='_fallback' return='string' arguments='enum e'>
[02 Enum.lua] Returns a string representing an enum starting from '_'. For example, passing <Link class='ENUM' function='PlayerNumber'>PlayerNumber_P1</Link> to this function will return <code>P1</code>.
</Function>
<Function name='Trace' theme='_fallback' return='void' arguments='string sString'>
[00 init.lua] Alias for <Link class='lua' function='Trace' />.
</Function>
<Function name='type' return='string' arguments='various v'>
Returns the type of the object as a string. See the Lua manual for valid return values.
</Function>
<Function name='unpack' return='' arguments='table list, int i, int j'>
"Returns the elements from the given table.
This function is equivalent to <code>return list[i], list[i+1], ···, list[j]</code>"
(<code>i</code> and <code>j</code> are optional; "by default, i is 1 and j is the length of the list.")
</Function>
<Function name='URLEncode' return='string' arguments='string sInput'>
Returns a string with characters escaped for URLs. (e.g. a space becomes '%20')
</Function>
<Function name='Var' theme='_fallback' return='ThreadVariable' arguments=''>
[01 base.lua] Alias for <Link class="lua" function="GetThreadVariable">lua.GetThreadVariable</Link>.
</Function>
<Function name='VersionDate' return='string' arguments=''>
Returns the current version's build date.
</Function>
<Function name='VersionTime' return='string' arguments=''>
Returns the current version's build time.
</Function>
<Function name='Warn' theme='_fallback' return='void' arguments='string sString'>
[00 init.lua] Alias for <Link class='lua' function='Warn' />.
</Function>
<Function name='WideScale' theme='_fallback' return='float' arguments='float ar43, float ar169'>
[04 WidescreenHelpers.lua] Depending on the screen width, scales between <code>ar43</code> (4:3; 640px) and <code>ar169</code> (16:9; 854px).
</Function>
<Function name='wrap' theme='_fallback' return='float' arguments='float val, float n'>
[02 Utilities.lua]
</Function>
<Function name='WrapInActorFrame' theme='_fallback' return='ActorFrame' arguments='table children'>
[02 ActorDef.lua] Wraps the children in an ActorFrame.
</Function>
<Function name='WriteFile' theme='_fallback' return='bool' arguments='string path, string buf'>
[04 FileUtils.lua] Writes <code>buf</code> to the file at <code>path</code>.
</Function>
<Function name='WriteGamePrefToFile' theme='_fallback' return='' arguments='string name'>
[03 GamePreferences.lua]
</Function>
<Function name='WritePrefToFile' theme='_fallback' return='bool' arguments='string prefName, various value'>
[03 UserPreferences2.lua] (internal) Writes user preference <code>prefName</code> to its config file with <code>value</code> being <code>tostring</code>'d.
</Function>
<Function name='Year' return='int' arguments=''>
Returns the current year.
</Function>
<!-- new sm-ssc additions here -->
<!-- default theme preferences -->
<Function name='OptionRowProTiming' theme='default' return='LuaOptionRow' arguments=''>
[03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
</Function>
<Function name='UserPrefAutoSetStyle' theme='default' return='LuaOptionRow' arguments=''>
[03 ThemePrefs.lua] Returns a Lua option row for toggling AutoSetStyle.
</Function>
@@ -367,9 +541,16 @@
<!-- Namespaces -->
<Namespaces>
<Namespace name='ActorUtil'>
<Function name='GetFileType' return='FileType' arguments='string sPath'>
Returns the <Link class='ENUM' function='FileType' /> for the file at <code>sPath</code>.
</Function>
<Function name='IsRegisteredClass' return='bool' arguments='string sClassName'>
Returns <code>true</code> if <code>sClassName</code> is a registered Class.
</Function>
<Function name='LoadAllCommandsAndSetXY' return='void' arguments='Actor a'>
Loads all commands and sets X and Y for the specified Actor.
</Function>
<Function name='ResolvePath' return='string' arguments='string sPath, int iLevel' />
</Namespace>
<Namespace name='Enum'>
<Description>
@@ -414,6 +595,20 @@
</Function>
</Namespace>
<Namespace name='lua'>
<Function name='CheckType' return='bool' arguments='string sType, various v'>
Returns <code>true</code> if the type of <code>v</code> is <code>sType</code>.
</Function>
<Function name='Flush' return='void' arguments='' >
Flushes log files to disk.
</Function>
<Function name='GetThreadVariable' return='LuaThreadVariable' arguments='string s' />
<Function name='ReadFile' return='string' arguments='string sPath'>
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='RunWithThreadVariables' return='int' arguments='function func, table t, ...'>
Calls <code>func(...)</code> with two LuaThreadVariables set, and returns the return values of <code>func()</code>.
</Function>
<Function name='Trace' return='void' arguments='string sString'>
Writes <code>sString</code> to log.txt. Aliased by
<Link class='GLOBAL' function='Trace' />.
@@ -422,9 +617,6 @@
Writes <code>sString</code> to info.txt and log.txt as
a warning. Aliased by <Link class='GLOBAL' function='Warn' />.
</Function>
<Function name='Flush' return='void' arguments='' >
Flushes log files to disk.
</Function>
</Namespace>
<Namespace name='RageFileUtil'>
<Function name='CreateRageFile' return='RageFile' arguments=''>
@@ -437,6 +629,9 @@
</Function>
</Namespace>
<Namespace name='SongUtil'>
<Function name='GetPlayableSteps' return='Steps' arguments='Song so'>
Gets the playable Steps for the present Song based on the present Game.
</Function>
<Function name='IsStepsPlayable' return='bool' arguments='Song so, Steps st'>
Returns true if the song's steps (<code>st</code>) are playable.
</Function>
@@ -560,7 +755,21 @@
[02 Actor.lua]
</Function>
<Function name='Center' theme='_fallback' return='void' arguments=''>
[02 Actor.lua] Centers an Actor.
[02 Actor.lua] Centers an Actor on the screen. (equivalent to <code>x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y</code>)
</Function>
<Function name='CenterX' theme='_fallback' return='void' arguments=''>
[03 ProductivityHelpers.lua] Centers an Actor on the X axis. (equivalent to <code>x,SCREEN_CENTER_X</code>)
</Function>
<Function name='CenterY' theme='_fallback' return='void' arguments=''>
[03 ProductivityHelpers.lua] Centers an Actor on the y axis. (equivalent to <code>y,SCREEN_CENTER_Y</code>)
</Function>
<Function name='clearzbuffer' return='void' arguments='bool bClear'>
Determines if the z-buffer should be cleared or not.
</Function>
<Function name='compound' theme='_fallback' return='void' arguments='float length, string tweens'>
[02 Actor.lua] Combines multiple interpolators for complex tweens. <code>tweens</code>
can either be a string like <code>"linear,0.25,accelerate,0.75"</code> or
a table with tween information <code>{ {Type="linear", Percent=0.25, Bezier=nil}, {Type="accelerate", Percent=0.75, Bezier=nil} }</code>
</Function>
<Function name='cropbottom' return='void' arguments='float percent'>
Crops <code>percent</code> of the Actor from the bottom, where <code>percent</code> is in the range 0..1.
@@ -853,6 +1062,9 @@
<Function name='stopeffect' return='void' arguments=''>
Stops any effect the Actor has.
</Function>
<Function name='stoptweening' return='void' arguments=''>
Stops any tweening.
</Function>
<Function name='stretchto' return='void' arguments='float x1, float y1, float x2, float y2'>
Stretches the Actor to a rectangle of a specific size.
</Function>
@@ -877,6 +1089,12 @@
<Function name='z' return='void' arguments='float zPos'>
Set the z position of the Actor to <code>zPos</code>.
</Function>
<Function name='zbias' return='void' arguments='float fBias'>
Sets the z bias to <code>fBias</code>.
</Function>
<Function name='zbuffer' return='void' arguments='bool bUse'>
Enables/disables z-buffer depending on <code>bUse</code>.
</Function>
<Function name='zoom' return='void' arguments='float zoom'>
Zooms the Actor to <code>zoom</code> scale.
</Function>
@@ -898,19 +1116,19 @@
<Function name='zoomz' return='void' arguments='float zoom'>
Zooms the Actor to <code>zoom</code> scale on the Z axis.
</Function>
<Function name='ztest' return='void' arguments='bool bTest'>
Sets the z testing mode to write on pass if <code>true</code>, turns it off if <code>false</code>
</Function>
<Function name='ztestmode' return='void' arguments='ZTestMode testMode'>
Sets the z testing mode to <code>testMode</code>.
</Function>
<Function name='zwrite' return='void' arguments='bool bWrite'>
Sets z writing to <code>true</code> or <code>false</code> based on <code>bWrite</code>.
</Function>
<!-- addons from scripts that come with sm-ssc (non-compat) -->
<Function name='bezier' theme='_fallback' return='void' arguments=''>
[02 Actor.lua]
</Function>
<Function name='Center' theme='_fallback' return='void' arguments=''>
[02 Actor.lua] Centers an Actor on the screen. (equivalent to <code>x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y</code>)
</Function>
<Function name='CenterX' theme='_fallback' return='void' arguments=''>
[03 ProductivityHelpers.lua] Centers an Actor on the X axis. (equivalent to <code>x,SCREEN_CENTER_X</code>)
</Function>
<Function name='CenterY' theme='_fallback' return='void' arguments=''>
[03 ProductivityHelpers.lua] Centers an Actor on the y axis. (equivalent to <code>y,SCREEN_CENTER_Y</code>)
</Function>
<Function name='FullScreen' theme='_fallback' return='void' arguments=''>
[02 Actor.lua] Stretches an Actor to cover the screen. (equivalent to <code>stretchto,0,0,SCREEN_WIDTH,SCREEN_HEIGHT</code>)
</Function>
@@ -1163,7 +1381,7 @@
Loads the card image from the specified Character.
</Function>
<Function name='LoadFromCachedBanner' return='void' arguments='string sPath'>
Loads the banner from the cache based on <code>sPath</code> (typically <Link class='Song' function='GetBannerPath' /> or <Link class='Course' function='GetBannerPath' />).
</Function>
<Function name='LoadFromCourse' return='void' arguments='Course c'>
Loads a Banner from a specified Course.
@@ -1322,6 +1540,9 @@
<Function name='GetRandomCharacter' return='Character' arguments=''>
Returns a random character.
</Function>
<Function name='GetCharacterCount' return='int' arguments=''>
Returns the number of characters available.
</Function>
</Class>
<Class name='ComboGraph'>
<Function name='Load' return='void' arguments='string sMetricsGroup'>
@@ -1452,6 +1673,9 @@
<Function name='MD5String' return='string' arguments='string s'>
Returns the MD5 hash for <code>s</code>.
</Function>
<Function name='SHA1File' return='string' arguments='string sPath'>
Returns the SHA-1 hash for the file at <code>sPath</code>.
</Function>
<Function name='SHA1String' return='string' arguments='string s'>
Returns the SHA-1 hash for <code>s</code>.
</Function>
@@ -2004,6 +2228,9 @@
</Function>
</Class>
<Class name='LifeMeterBattery'>
<Function name='ChangeLives' return='void' arguments='int iNumLives'>
Changes the player's life by <code>iNumLives</code>. (Negative values subtract lives.)
</Function>
<Function name='GetLivesLeft' return='int' arguments=''>
Returns the number of lives remaining.
</Function>
@@ -2347,6 +2574,9 @@
</Function>
<Function name='GetSongAttacks' return='float' arguments=''>
This function is deprecated. Please use GetStepAttacks() instead.
</Function>
<Function name='GetStepAttacks' return='float' arguments=''>
</Function>
<Function name='GetSplit' return='float' arguments=''>
@@ -2701,7 +2931,9 @@
</Function>
</Class>
<Class name='ProfileManager'>
<Function name='GetLocalProfile' return='Profile' arguments='string sProfileID' />
<Function name='GetLocalProfile' return='Profile' arguments='string sProfileID'>
Returns the Profile for the specified profile ID.
</Function>
<Function name='GetLocalProfileFromIndex' return='Profile' arguments='int iIndex' />
<Function name='GetLocalProfileIDFromIndex' return='string' arguments='int iIndex' />
<Function name='GetLocalProfileIndexFromID' return='int' arguments='string sProfileID' />
@@ -2723,6 +2955,9 @@
<Function name='IsSongNew' return='bool' arguments='Song s'>
Returns <code>true</code> if Song <code>s</code> has never been played before (according to the machine profile).
</Function>
<Function name='ProfileWasLoadedFromMemoryCard' return='bool' arguments='PlayerNumber pn'>
Returns <code>true</code> if <code>pn</code>'s Profile was loaded from a memory card.
</Function>
<Function name='LastLoadWasFromLastGood' return='bool' arguments='PlayerNumber pn'>
Returns <code>true</code> if the last load of player <code>pn</code>'s profile was a LastGood copy of the profile.
</Function>
@@ -2858,12 +3093,21 @@
<Function name='GetPrevScreenName' return='string' arguments=''>
Returns the name of the previous Screen.
</Function>
<Function name='GetScreenType' return='ScreenType' arguments=''>
Returns the ScreenType for this Screen.
</Function>
<Function name='lockinput' return='void' arguments='float f'>
Locks input for <code>f</code> seconds.
</Function>
<Function name='Metric' theme='_fallback' return='string' arguments='string sName'>
[02 Other.lua] Gets a metric from the current Screen.
</Function>
<Function name='PostScreenMessage' return='void' arguments='string sScreenMsg'>
Posts a message with the text <code>sScreenMsg</code> to the Screen.
</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>
</Class>
<Class name='ScreenEdit'>
<Function name='GetEditState' return='EditState' arguments=''>
@@ -3078,6 +3322,9 @@
<Function name='GetFirstBeat' return='float' arguments=''>
Returns the first beat of the song.
</Function>
<Function name='GetFirstSecond' return='float' arguments=''>
Returns the first second of the song.
</Function>
<Function name='GetGenre' return='string' arguments=''>
Returns the genre of the song.
</Function>
@@ -3087,6 +3334,9 @@
<Function name='GetLastBeat' return='float' arguments=''>
Returns the last beat of the song.
</Function>
<Function name='GetLastSecond' return='float' arguments=''>
Returns the last second of the song.
</Function>
<Function name='GetLyricsPath' return='string' arguments=''>
Gets the path to the lyrics.
</Function>
@@ -3328,6 +3578,9 @@
<Function name='LoadBanner' return='void' arguments='string sPath'>
Load the song banner texture at <code>sPath</code>.
</Function>
<Function name='LoadFromCurrentSongBackground' theme='_fallback' return='void' arguments=''>
[02 Sprite.lua] Loads the background from the current Song or the first Trail entry.
</Function>
<Function name='LoadFromSongBackground' theme='_fallback' return='void' arguments='Song song'>
[02 Sprite.lua] Load the texture for <code>song</code>'s background.
</Function>
@@ -3340,6 +3593,9 @@
<Function name='SetEffectMode' return='void' arguments='EffectMode mode'>
Set the <Link class='ENUM' function='EffectMode' /> to <code>mode</code>.
</Function>
<Function name='SetSecondsIntoAnimation' return='void' arguments='float fSeconds'>
Sets the number of seconds into the animation to <code>fSeconds</code>.
</Function>
<Function name='SetTexture' return='void' arguments='RageTexture texture'>
Set the texture to <code>texture</code>.
</Function>
@@ -3445,6 +3701,9 @@
<Function name='GetAuthorCredit' return='string' arguments=''>
Returns the author that made that particular Steps pattern.
</Function>
<Function name='GetChartName' return='string' arguments=''>
Returns the Steps chart name.
</Function>
<Function name='GetChartStyle' return='string' arguments=''>
Returns the Chart Style for this Steps.
</Function>
@@ -3463,8 +3722,11 @@
<Function name='GetMeter' return='int' arguments=''>
Returns the numerical difficulty of the Steps.
</Function>
<Function name='HasAttacks' return='bool' arguments=''>
Returns <code>true</code> if the Steps has any attacks.
</Function>
<Function name='HasSignificantTimingChanges' return='bool' arguments=''>
returns <code>true</code> if the song has significant timing changes.
Returns <code>true</code> if the Steps pattern has significant timing changes.
</Function>
<Function name='GetRadarValues' return='RadarValues' arguments='PlayerNumber pn'>
Returns the complete list of RadarValues for player <code>pn</code>. Use <Link class='RadarValues' function='GetValue' /> to grab a specific value.
@@ -3608,6 +3870,27 @@
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<Function name='HasBPMChanges' return='bool' arguments=''>
Returns <code>true</code> if the TimingData contains BPM changes.
</Function>
@@ -3690,6 +3973,9 @@
<Function name='GetRequirePassHardSteps' return='bool' arguments=''>
Returns <code>true</code> if the UnlockEntry requires you to pass Hard steps.
</Function>
<Function name='GetRequirePassChallengeSteps' return='bool' arguments=''>
Returns <code>true</code> if the UnlockEntry requires you to pass Challenge steps.
</Function>
<Function name='GetSong' return='Song' arguments=''>
Returns the Song related to the UnlockEntry.
</Function>
@@ -3720,6 +4006,9 @@
Sets the UnlockEntry to unlock a specified song's steps.<br />
Example: <code>steps,"In The Groove/Pandemonium","expert"</code>
</Function>
<Function name='steps_type' return='void' arguments='string sSong, string sSteps, string sStepsType'>
Sets the UnlockEntry to unlock a specified song's stepstype.
</Function>
</Class>
<Class name='UnlockManager'>
<Function name='AnyUnlocksToCelebrate' return='bool' arguments=''>
@@ -3755,7 +4044,9 @@
<Function name='GetUnlockEntryIndexToCelebrate' return='int' arguments=''>
Returns the UnlockEntry index to celebrate.
</Function>
<Function name='PreferUnlockEntryID' return='void' arguments='string sUnlockEntryID' />
<Function name='PreferUnlockEntryID' return='void' arguments='string sUnlockEntryID'>
Sets the preferred Song/Course to the specified <code>sUnlockEntryID</code>
</Function>
<Function name='UnlockEntryID' return='void' arguments='string sUnlockEntryID'>
Unlocks an entry by ID.
</Function>
+11 -6
View File
@@ -21,19 +21,19 @@
#DELAYS:;
#LABELS:;
#TIMESIGNATURES:;
#LASTBEATHINT:;
#SAMPLESTART:;
#SAMPLELENGTH:;
#DISPLAYBPM:[xxx][xxx:xxx]|[*];
#SELECTABLE:;
#LASTSECONDHINT:;
#BGCHANGES:;
#FGCHANGES:;
#KEYSOUNDS:;
#ATTACKS:;
// stored in cache
#FIRSTBEAT:; // calculated
#LASTBEAT:; // calculated
#FIRSTSECOND:; // calculated
#LASTSECOND:; // calculated
#SONGFILENAME:;
#MUSICBYTES:; // ignored by loader
#HASMUSIC:;
@@ -42,6 +42,7 @@
// begin
#NOTEDATA# // marks a new note data section
// information from #NOTES moved here
#CHARTNAME:;
#STEPSTYPE:;
#DESCRIPTION:;
#CHARTSTYLE:;
@@ -51,6 +52,7 @@
#CREDIT:;
// steps-based timingdata
#OFFSET:;
#BPMS:;
#STOPS:;
#DELAYS:;
@@ -61,8 +63,11 @@
#SCROLLS:;
#FAKES:;
#LABELS:;
#ATTACKS:; // Not yet in use.
#OFFSET:;
#ATTACKS:;
#DISPLAYBPM:;
// actual step data
// only in cache files
#STEPFILENAME:;
// actual step data (not in cache files)
#NOTES:;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

+2
View File
@@ -1,5 +1,7 @@
[NoteDisplay]
DrawHoldHeadForTapsOnSameRow=1
DrawRollHeadForTapsOnSameRow=1
TapHoldRollOnRowMeansHold=1
AnimationIsBeatBased=1
TapNoteAnimationLength=1
TapMineAnimationLength=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

+2 -2
View File
@@ -20,14 +20,14 @@ ret.Redir = function(sButton, sElement)
if sElement == "Hold Head Active" or
sElement == "Roll Head Active"
then
sElement = "Hold Head Active";
sElement = "Tap Note";
end
-- Test
if sElement == "Hold Head Inactive" or
sElement == "Roll Head Inactive"
then
sElement = "Hold Head Inactive";
sElement = "Tap Note";
end
if sElement == "Tap Fake"
+10 -3
View File
@@ -3,7 +3,8 @@ FallbackNoteSkin=default
[NoteDisplay]
TapNoteAnimationIsVivid=0
DrawHoldHeadForTapsOnSameRow=1
HoldHeadAnimationIsVivid=0
DrawHoldHeadForTapsOnSameRow=0
TapNoteAnimationLength=4
TapAdditionAnimationLength=4
TapMineAnimationLength=1
@@ -34,8 +35,14 @@ TapNoteNoteColorTextureCoordSpacingY=0.125
TapFakeNoteColorTextureCoordSpacingX=0
TapFakeNoteColorTextureCoordSpacingY=0.125
HoldHeadAdditionTextureCoordOffsetX=0
HoldHeadAdditionTextureCoordOffsetY=0
HoldHeadNoteColorTextureCoordSpacingX=0
HoldHeadNoteColorTextureCoordSpacingY=0
HoldTopCapAdditionTextureCoordOffsetX=0
HoldTopCapAdditionTextureCoordOffsetY=0
HoldTopCapNoteColorTextureCoordSpacingX=0
HoldTopCapNoteColorTextureCoordSpacingY=0
[GhostArrowDim]
NoneCommand=
@@ -62,8 +69,8 @@ LetGoCommand=blend,'BlendMode_Add';
HeldCommand=blend,'BlendMode_Add';diffuse,1.0,1.0,0.3,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0
[HoldGhostArrow]
HoldingOnCommand=visible,true
HoldingOffCommand=visible,false
HoldingOnCommand=blend,'BlendMode_Add';pulse;effectmagnitude,1,1.125,1;effectperiod,0.05;effectclock,'beatnooffset';visible,true
HoldingOffCommand=blend,'BlendMode_Add';stopeffect;visible,false
[ReceptorArrow]
W3Command=stoptweening;zoom,0.85;linear,0.12;zoom,1
+3 -3
View File
@@ -1,9 +1,9 @@
[Global]
FallbackNoteSkin=default
FallbackNoteSkin=midi-note
[NoteDisplay]
TapNoteAnimationIsVivid=0
DrawHoldHeadForTapsOnSameRow=1
DrawHoldHeadForTapsOnSameRow=0
TapNoteAnimationLength=4
TapAdditionAnimationLength=4
TapMineAnimationLength=1
@@ -35,7 +35,7 @@ TapFakeNoteColorTextureCoordSpacingX=0
TapFakeNoteColorTextureCoordSpacingY=0.125
HoldHeadNoteColorTextureCoordSpacingX=0
HoldHeadNoteColorTextureCoordSpacingY=0.125
HoldHeadNoteColorTextureCoordSpacingY=0
[GhostArrowDim]
NoneCommand=
@@ -1 +0,0 @@
Down Tap Explosion Bright
+5
View File
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
StartDrawingHoldBodyOffsetFromHead=0
StopDrawingHoldBodyOffsetFromTail=-32
TapNoteAnimationIsVivid=0
# control the vertical
TapNoteNoteColorTextureCoordSpacingX=0
TapNoteNoteColorTextureCoordSpacingY=0
TapNoteAdditionTextureCoordOffsetX=0
TapNoteAdditionTextureCoordOffsetY=0.5
+5
View File
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
StartDrawingHoldBodyOffsetFromHead=0
StopDrawingHoldBodyOffsetFromTail=-32
TapNoteAnimationIsVivid=0
# control the vertical
TapNoteNoteColorTextureCoordSpacingX=0
TapNoteNoteColorTextureCoordSpacingY=0
TapNoteAdditionTextureCoordOffsetX=0
TapNoteAdditionTextureCoordOffsetY=0.5
+2 -3
View File
@@ -15,10 +15,9 @@ return Def.ActorFrame {
--tap
NOTESKIN:LoadActor(Var "Button", "Ready Receptor")..{
Name="Tap";
Frames = { { Frame = 2 } };
--Frames = { { Frame = 2 ; Delay = 1 } };
TapCommand=cmd(finishtweening;diffusealpha,1;zoom,1;linear,0.2;diffusealpha,0;zoom,1.2);
InitCommand=cmd(playcommand,"Tap");
InitCommand=cmd(pause;setstate,2;playcommand,"Tap");
HeldCommand=cmd(playcommand,"Tap");
ColumnJudgmentMessageCommand=cmd(playcommand,"Tap");
--TapNoneCommand=cmd(playcommand,"Tap");
+6 -2
View File
@@ -1,12 +1,16 @@
local function Beat(self)
-- too many locals
local this = self:GetChildren()
local player = GAMESTATE:GetMasterPlayerNumber()
local playerstate = GAMESTATE:GetPlayerState( player )
local songposition = playerstate:GetSongPosition() -- GAMESTATE:GetSongPosition()
local beat = GAMESTATE:GetSongBeat()
local beat = songposition:GetSongBeat() -- GAMESTATE:GetSongBeat()
local part = beat%1
part = clamp(part,0,0.5)
local eff = scale(part,0,0.5,1,0)
if (GAMESTATE:GetSongPosition():GetDelay() or false) and part == 0 then eff = 0 end
if (songposition:GetDelay() or false) and part == 0 then eff = 0 end
if beat < 0 then
eff = 0
end
Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 621 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

+8
View File
@@ -0,0 +1,8 @@
[How to Install Songs]
Songs are laid out based on the group that they are in.
Songs\ : root folder
StepMania 5\ : group folder
MechaTribe Assault\ : song/simfile folder
*.png, *.mp3/*.ogg, *.sm/*.ssc/etc files
@@ -25,7 +25,8 @@ local ssc = {
}
local sm_ssc = {
"Jason Felds (wolfman2000)",
"Jason Felds (wolfman2000)", -- Timing Segments, Split Timing, optimization
"Thai Pangsakulyanont (theDtTvB)", -- BMS, Split Timing, optimization
"Alberto Ramos (Daisuke Master)",
"Jack Walstrom (FSX)",
}
@@ -39,9 +40,10 @@ local stepmania = {
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays
"Chris Eldridge (kurisu)", -- dance-threepanel
"cerbo",
"cesarmades", -- pump/cmd* noteskins
"Chris Eldridge (kurisu)", -- dance-threepanel
"Christophe Goulet-LeBlanc (Kommisar)",
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
"gholms", -- automake 1.11 support
@@ -49,8 +51,8 @@ local contrib = {
"Kaox", -- pump/default noteskin
"NitroX72", -- pump/frame noteskin
"sy567", -- beginner helper fix
"Thai Pangsakulyanont (theDtTvB)",
"v1toko", -- x-mode from StepNXA
"waiei", -- custom scoring fixes + Hybrid scoring
}
local thanks = {
@@ -70,10 +72,11 @@ local thanks = {
local shoutout = {
"The Lua team", -- lua project lead or some shit. super nerdy but oh hell.
"Mojang", -- minecraft forever -freem
"Mojang AB", -- minecraft forever -freem
"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",
"You showed us... your ultimate dance",
-- "Can't stop crying... buckets of tears!"
}
@@ -0,0 +1 @@
return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" };
@@ -1 +0,0 @@
_blank
@@ -0,0 +1,289 @@
function MakeScoreList(StagesAgo)
local c;
local Stats;
local PlayerStats = { }
local children = {
LoadActor( "difficulty cap 9x1" ) .. {
Name="DifficultyP1";
InitCommand = cmd(x,-66;pause;halign,1);
OnCommand=cmd(zoomx,0;sleep,0.3;bounceend,0.3;zoomx,1);
OffCommand=cmd(bouncebegin,0.1;zoomx,0);
};
LoadActor( "difficulty cap 9x1" ) .. {
Name="DifficultyP2";
InitCommand = cmd(x,66;pause;halign,1;zoomx,0);
OnCommand=cmd(zoomx,0;sleep,0.3;bounceend,0.3;zoomx,-1);
OffCommand=cmd(bouncebegin,0.1;zoomx,0);
};
LoadActor( "banner mask" ) .. {
Name="BannerMask";
InitCommand=cmd(clearzbuffer,true;zwrite,true;blend,"BlendMode_NoEffect");
OnCommand=cmd(zoom,0;bounceend,0.3;zoom,1);
OffCommand=cmd(bouncebegin,0.3;zoom,0);
};
Def.Sprite {
Name = "Banner";
InitCommand = cmd(setsize,300,100;zoom,0.5;ztest,true);
OnCommand=cmd(zoom,0;bounceend,0.3;zoom,0.5);
OffCommand=cmd(bouncebegin,0.3;zoom,0);
};
LoadActor( "banner frame" ) .. {
Name="BannerFrame";
OnCommand=cmd(zoom,0;bounceend,0.3;zoom,1);
OffCommand=cmd(bouncebegin,0.3;zoom,0);
};
LoadActor( "side score frame" ) .. {
Name="ScoreFrameP1";
InitCommand=cmd();
OnCommand=cmd(x,-266;addx,-250;diffusealpha,1;decelerate,0.3;addx,250);
OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0);
};
LoadActor( "side score frame" ) .. {
Name="ScoreFrameP2";
InitCommand=cmd(zoomx,-1);
OnCommand=cmd(x,266;addx,250;diffusealpha,1;decelerate,0.3;addx,-250);
OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0);
};
LoadFont( "Common Normal" ) .. {
-- LoadFont( "_regra bold 30px" ) .. {
Name="PlayerScoreP1";
InitCommand=cmd(x,-135;diffuse,color("#fdf991");shadowlength,0;zoom,0.6);
OnCommand=cmd(x,-135;addx,50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,-50;diffusealpha,1;zoom,0.6);
OffCommand=cmd(linear,0.3;diffusealpha,0);
};
LoadFont( "Common Normal" ) .. {
-- LoadFont( "_regra bold 30px" ) .. {
Name="PlayerScoreP2";
InitCommand=cmd(x,135;diffuse,color("#abfe8e");shadowlength,0;zoom,0.6);
OnCommand=cmd(x,135;addx,-50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,50;diffusealpha,1;zoom,0.6);
OffCommand=cmd(linear,0.3;diffusealpha,0);
};
LoadFont( "Common Normal" ) .. {
-- LoadFont( "_regra bold 30px" ) .. {
Name="MachineBestP1";
InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5);
OnCommand=cmd(x,-250;addx,-250;diffusealpha,1;decelerate,0.3;addx,250);
OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0);
};
LoadFont( "Common Normal" ) .. {
-- LoadFont( "_regra bold 30px" ) .. {
Name="MachineBestP2";
InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5);
OnCommand=cmd(x,250;addx,250;diffusealpha,1;decelerate,0.3;addx,-250);
OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0);
};
};
return Def.ActorFrame {
children = children;
InitCommand = function(self)
c = self:GetChildren();
c.PlayerScore = {};
c.PlayerScore[PLAYER_1] = c.PlayerScoreP1;
c.PlayerScore[PLAYER_2] = c.PlayerScoreP2;
c.MachineBest = {};
c.MachineBest[PLAYER_1] = c.MachineBestP1;
c.MachineBest[PLAYER_2] = c.MachineBestP2;
c.ScoreFrame = {};
c.ScoreFrame[PLAYER_1] = c.ScoreFrameP1;
c.ScoreFrame[PLAYER_2] = c.ScoreFrameP2;
c.Difficulty = {};
c.Difficulty[PLAYER_1] = c.DifficultyP1;
c.Difficulty[PLAYER_2] = c.DifficultyP2;
end;
BeginCommand = function(self)
Stats = STATSMAN:GetPlayedStageStats(StagesAgo);
if not Stats then
self:visible(false);
return;
end;
self:visible(true);
PlayerStats[PLAYER_1] = Stats:GetPlayerStageStats(PLAYER_1);
PlayerStats[PLAYER_2] = Stats:GetPlayerStageStats(PLAYER_2);
local Current;
local CurrentPart = {}
if GAMESTATE:IsCourseMode() then
Current = GAMESTATE:GetCurrentCourse();
CurrentPart[PLAYER_1] = GAMESTATE:GetCurrentTrail( PLAYER_1 );
CurrentPart[PLAYER_2] = GAMESTATE:GetCurrentTrail( PLAYER_2 );
else
Current = Stats:GetPlayedSongs()[1];
CurrentPart[PLAYER_1] = PlayerStats[PLAYER_1]:GetPlayedSteps()[1];
CurrentPart[PLAYER_2] = PlayerStats[PLAYER_2]:GetPlayedSteps()[1];
end
assert(Current);
local sBannerPath = Current:GetBannerPath() or THEME:GetPathG("Common","fallback banner");
c.Banner:LoadBanner( sBannerPath );
for pn in ivalues(PlayerNumber) do
local visible = GAMESTATE:IsHumanPlayer(pn) and CurrentPart[pn] ~= nil; -- was present for this song
c.MachineBest[pn]:visible( visible );
c.PlayerScore[pn]:visible( visible );
c.ScoreFrame[pn]:visible( visible );
c.Difficulty[pn]:visible( visible );
local MachineProfile = PROFILEMAN:GetMachineProfile();
if visible then
assert(CurrentPart[pn]);
-- c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] );
local hsl = MachineProfile:GetHighScoreList( Current, CurrentPart[pn] );
assert( hsl );
-- Find the first high score that isn't one that we're entering now.
local HighScores = hsl:GetHighScores();
local hs;
for h in ivalues(HighScores) do
if not hs and not h:IsFillInMarker() then
hs = h;
end
end
if hs then
local fMachineScore = hs:GetPercentDP() or 0;
local sName = hs:GetName() or "";
local sText = sName .. " " .. FormatPercentScore( fMachineScore );
c.MachineBest[pn]:settext( sText );
else
c.ScoreFrame[pn]:visible( false );
end
local fPlayerScore = PlayerStats[pn]:GetPercentDancePoints();
local sText = FormatPercentScore( fPlayerScore );
c.PlayerScore[pn]:settext( sText );
local colors = {
[PLAYER_1] = color("#fdf991"),
[PLAYER_2] = color("#abfe8e"),
};
if Stats:PlayerHasHighScore(pn) then
colors = {
[PLAYER_1] = color("#feef01"),
[PLAYER_2] = color("#0ffc03"),
};
end
c.PlayerScore[pn]:diffuse(colors[pn]);
end;
end;
end;
};
end
local children = {
LoadActor( "center frame" ) .. {
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+9);
OnCommand=cmd(fadetop,0.3; croptop,1; linear,0.5; croptop,-0.3);
OffCommand=cmd(linear,0.5; croptop,1);
};
LoadActor( "line" ) .. {
InitCommand=cmd(x,SCREEN_CENTER_X;SetWidth,336;y,SCREEN_CENTER_Y+65;fadeleft,0.3; faderight,0.3);
OnCommand=cmd(cropleft,.5;cropright,.5;
sleep,0.2;
linear,0.3;
cropleft,-.2;cropright,-.2);
OffCommand=cmd(linear,0.3;cropleft,.5;cropright,.5);
};
};
for i = 1,5 do
children[#children+1] =
MakeScoreList(i) .. {
Name="Row" .. tostring(i);
InitCommand=cmd(x,SCREEN_CENTER_X);
};
end
--[[ children[#children+1] =
LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; --]]
children[#children+1] = LoadActor( "keyboard" ) .. {
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+80);
BeginCommand = cmd(visible,SCREENMAN:GetTopScreen():GetAnyEntering());
};
for pn in ivalues(PlayerNumber) do
local FrameX = pn == PLAYER_1 and (SCREEN_CENTER_X-265) or (SCREEN_CENTER_X+267);
local P1 = pn == PLAYER_1 and 1 or -1;
children[#children+1] = LoadActor( "name frame" ) .. {
InitCommand=cmd(y,SCREEN_CENTER_Y+119;
zoomx,pn == PLAYER_1 and 1.0 or -1.0);
BeginCommand=cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
OnCommand=cmd(finishtweening;x,FrameX;addx,-200*P1;zoom,0;bounceend,0.3;zoom,1;addx,200*P1);
OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1);
};
children[#children+1] = LoadFont( "Common Normal" ) .. {
-- children[#children+1] = LoadFont( "_regra bold 30px" ) .. {
Name="PlayerText";
InitCommand=cmd(x,pn == PLAYER_1 and (SCREEN_CENTER_X-WideScale(310,330)) or (SCREEN_CENTER_X+WideScale(198,204));
halign,0;
y,SCREEN_CENTER_Y+115;shadowlength,0;zoom,1);
BeginCommand=cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
OnCommand=cmd(finishtweening;diffusealpha,0;sleep,0.1;linear,0.3;diffusealpha,1);
OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1);
EntryChangedMessageCommand=function(self,params)
if params.PlayerNumber ~= pn then
return;
end;
self:settext( params.Text );
end;
};
end;
return Def.ActorFrame {
children = children;
BeginCommand = function(self)
local StagesPlayed = STATSMAN:GetStagesPlayed();
local c = self:GetChildren();
local fYCenter = SCREEN_CENTER_Y-60;
local fYMinSpacing = 44;
local fYMaxSpacing = 70;
local fYSpacing = scale(StagesPlayed, 4, 5, fYMaxSpacing, fYMinSpacing);
fYSpacing = clamp(fYSpacing, fYMinSpacing, fYMaxSpacing);
fYSpacing = fYSpacing + math.mod(fYSpacing, 2); -- even
fYSpacing = -fYSpacing;
local fYStart = fYSpacing*(StagesPlayed-1)/2;
local fYEnd = -fYSpacing*(StagesPlayed-1)/2;
for i = 1,StagesPlayed do
local Name = "Row" .. tostring(i);
local row = c[Name];
assert(row);
local fY = fYCenter + fYEnd + (i-1)*fYSpacing;
row:y( fY );
end
local Timer = SCREENMAN:GetTopScreen():GetChild("Timer");
if not SCREENMAN:GetTopScreen():GetAnyEntering() then
Timer:setseconds(5);
Timer:silent(true);
else
Timer:setseconds(25);
Timer:silent(false);
end
end;
OnCommand = function(self)
local StagesPlayed = STATSMAN:GetStagesPlayed();
local c = self:GetChildren();
for i = 1,StagesPlayed do
local Name = "Row" .. tostring(i);
local row = c[Name];
assert(row);
row:hibernate(0.3+(i/StagesPlayed)*0.3);
end
end;
};
@@ -0,0 +1,285 @@
local function distance( x1, y1, x2, y2 )
return math.pow( math.pow(x1-x2, 2) + math.pow(y1-y2, 2), 0.5 );
end
local children = {
};
local Letters = {
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "?", "!",
"BACK", "ENTER"
};
local LetterIndexes = { };
for i, l in ipairs(Letters) do
LetterIndexes[l] = i;
end
local MapNameToLetter = {};
local MapLetterToName = {};
local letter = LoadFont( "Common Normal" ) .. {
-- local letter = LoadFont( "_regra bold 30px" ) .. {
InitCommand=cmd(zoom,0.8;shadowlength,0);
PulseCommand = function(self)
self:finishtweening();
local z = self:GetZoomX();
(cmd(accelerate,0.15;zoom,1.2;decelerate,0.15;zoom,z))(self);
end;
};
for l in ivalues(Letters) do
local Name = "letter " .. l;
MapNameToLetter[Name] = l;
MapLetterToName[l] = Name;
children[#children+1] = letter .. {
Name = Name;
Text = l;
};
if l == "BACK" or l == "ENTER" then
children[#children].File = THEME:GetPathF("", "Common Normal");
-- children[#children].File = THEME:GetPathF("", "_venacti 26px normal");
end;
end;
--[[ children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "back") ) .. { Name = "Back"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "enter") ) .. { Name = "Enter"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } --]]
children[#children+1] = LoadActor( THEME:GetPathS("Common", "value") ) .. { Name = "Type"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS("Common", "cancel") ) .. { Name = "Back"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS("Common", "start") ).. { Name = "Enter"; SupportPan = true; }
children[#children+1] = LoadActor( THEME:GetPathS("MusicWheel", "change") ) .. { Name = "Move"; SupportPan = true; }
local CursorFiles = {
[PLAYER_1] = "Cursor P1",
[PLAYER_2] = "Cursor P2"
};
for pn in ivalues(PlayerNumber) do
children[#children+1] = LoadActor( THEME:GetPathG("_frame", "1D"),
{ 4/10, 2/10, 4/10 },
LoadActor(CursorFiles[pn])
) .. {
Name = CursorFiles[pn];
BeginCommand = cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
OnCommand = cmd(
zoom,0;
rotationz,-360*2;
sleep,0.55;
decelerate,0.5;
zoom,1;
rotationz,0;
);
OffCommand = cmd(sleep,0.3;queuecommand,"TweenOff");
PlayerFinishedMessageCommand = function(self,param)
if param.PlayerNumber ~= pn then return end
self:playcommand("TweenOff" );
end;
TweenOffCommand = function(self,param)
(cmd(
accelerate,0.25;
zoomx,0;
))(self);
end;
};
end
local c;
local Keys = {};
local Selection = {};
local PlayerX = {};
local PlayerY = {};
return Def.ActorFrame {
children = children;
BeginCommand = function(self)
c = self:GetChildren();
c.Cursors = {};
c.Cursors[PLAYER_1] = c["Cursor P1"];
c.Cursors[PLAYER_2] = c["Cursor P2"];
for l in ivalues(Letters) do
local Name = MapLetterToName[l];
assert(Name);
Keys[l] = {
Text = c[Name];
Width = c[Name]:GetWidth();
Height = c[Name]:GetHeight();
};
assert(c[Name], Name);
end;
-- Position letters.
local RowWidths = {};
local fX = 0;
local fXPadding = 4;
local fY = 0;
local iRow = 1;
for l in ivalues(Letters) do
if l == "O" or l == "0" or l == "BACK"
then
fX = 0;
fY = fY + 30;
iRow = iRow + 1;
end;
Keys[l].Row = iRow;
Keys[l].Text:x(fX + Keys[l].Width/2);
Keys[l].Text:y(fY + Keys[l].Height/2);
fX = fX + Keys[l].Width;
RowWidths[iRow] = fX;
fX = fX + fXPadding;
end;
for l in ivalues(Letters) do
local iRow = Keys[l].Row;
Keys[l].Text:addx(-RowWidths[iRow]/2);
end;
Keys["BACK"].Text:x(-140);
Keys["ENTER"].Text:x(140);
for pn in ivalues(PlayerNumber) do
local sName = SCREENMAN:GetTopScreen():GetSelection(pn);
local DefaultKey = "A"
if #sName > 0 then
DefaultKey = "ENTER"
end
self:playcommand("SelectKey", { Key = DefaultKey, PlayerNumber = pn });
c.Cursors[pn]:finishtweening();
end
end;
CodeMessageCommand = function(self, param)
local pn = param.PlayerNumber;
if not SCREENMAN:GetTopScreen():GetAnyStillEntering() and param.Name == "Enter" then
if SCREENMAN:GetTopScreen():Finish(pn) then
c.Enter:play();
end
return;
end
if SCREENMAN:GetTopScreen():GetFinalized( pn ) then
return;
end
if param.Name == "Left" or param.Name == "Right" then
local iDir = param.Name == "Left" and -1 or 1;
local idx = LetterIndexes[Selection[pn]];
idx = idx + iDir;
idx = math.mod(idx+#Letters-1, #Letters)+1;
self:playcommand("SelectKey", { Key = Letters[idx], PlayerNumber = pn });
c.Move:playforplayer(pn);
return;
end
if param.Name == "JumpToEnter" then
self:playcommand("SelectKey", { Key = "ENTER", PlayerNumber = pn });
c.Move:playforplayer(pn);
return;
end
if param.Name == "Backspace" then
if SCREENMAN:GetTopScreen():Backspace(pn) then
c.Back:playforplayer(pn);
end
return;
end
if param.Name == "NextRow" or param.Name == "PrevRow" then
local iDir = param.Name == "PrevRow" and -1 or 1;
local idx = LetterIndexes[Selection[pn]];
local iRow = Keys[Selection[pn]].Row;
iRow = iRow + iDir;
iRow = math.mod(iRow+4-1, 4)+1;
local NearestLetter
local NearestLetterDistance
for l in ivalues(Letters) do
if iRow == Keys[l].Row then
local Text = Keys[l].Text;
local fDist = distance( PlayerX[pn], PlayerY[pn],
Text:GetX(), Text:GetY() );
if not NearestLetterDistance or fDist < NearestLetterDistance then
NearestLetterDistance = fDist;
NearestLetter = l;
end
end
end
assert( NearestLetter );
self:playcommand("SelectKey", { Key = NearestLetter, PlayerNumber = pn, NoStore = true });
c.Move:playforplayer(pn);
return;
end
if param.Name == "Enter" then
if Selection[pn] == "BACK" then
if SCREENMAN:GetTopScreen():Backspace(pn) then
Keys[Selection[pn]].Text:playcommand( "Pulse" );
c.Back:playforplayer(pn);
end
elseif Selection[pn] == "ENTER" then
if SCREENMAN:GetTopScreen():Finish(pn) then
Keys[Selection[pn]].Text:playcommand( "Pulse" );
c.Enter:playforplayer(pn);
end
else
local key = Selection[pn]; -- EnterKey may change this
if SCREENMAN:GetTopScreen():EnterKey(pn, key) then
Keys[key].Text:playcommand( "Pulse" );
c.Type:playforplayer(pn);
end
end
end
end;
SelectKeyMessageCommand = function(self, param)
local key = param.Key;
local pn = param.PlayerNumber;
if not Keys[key] then return end
Selection[pn] = key;
c.Cursors[pn]:stoptweening();
c.Cursors[pn]:playcommand( "SetSize", { Width=Keys[key].Width+6; tween=cmd(stoptweening;linear,0.10); } );
c.Cursors[pn]:x( Keys[key].Text:GetX() );
c.Cursors[pn]:y( Keys[key].Text:GetY() );
if not param.NoStore then
PlayerX[pn] = Keys[key].Text:GetX();
PlayerY[pn] = Keys[key].Text:GetY();
end
-- SCREENMAN:GetTopScreen():EnterKey(PLAYER_2,"x");
end;
MenuTimerExpiredMessageCommand = function(self, param)
for pn in ivalues(PlayerNumber) do
SCREENMAN:GetTopScreen():Finish(pn);
end
c.Enter:play();
end;
OnCommand = function(self, param)
for key in ivalues(Letters) do
local fDist = distance( Keys[key].Text:GetX(), Keys[key].Text:GetY(), 0, 100 );
local f = cmd(
diffusealpha,0;zoom,0;
sleep,0.25 + (fDist / 400);
decelerate,0.5;
diffusealpha,1;zoom,0.8);
f(Keys[key].Text);
end
end;
OffCommand = function(self, param)
for key in ivalues(Letters) do
local fDist = distance( Keys[key].Text:GetX(), Keys[key].Text:GetY(), 0, 100 );
local f = cmd(
sleep,0.0 + (fDist / 400);
decelerate,0.5;
diffusealpha,0;zoom,0);
f(Keys[key].Text);
end
end;
};
@@ -1,49 +1,2 @@
local function CreditsText( pn )
function update(self)
local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
self:settext(str);
end
function UpdateVisible(self)
local screen = SCREENMAN:GetTopScreen();
local bShow = true;
if screen then
local sClass = screen:GetName();
bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
end
self:visible( bShow );
end
local text = LoadFont(Var "LoadingScreen","credits") .. {
InitCommand=function(self)
self:name("Credits" .. PlayerNumberToString(pn))
ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen");
end;
UpdateTextCommand=function(self)
local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
self:settext(str);
end;
UpdateVisibleCommand=function(self)
local screen = SCREENMAN:GetTopScreen();
local bShow = true;
if screen then
local sClass = screen:GetName();
bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
end
self:visible( bShow );
end;
--[[ RefreshCreditTextMessageCommand=update;
CoinInsertedMessageCommand=update;
PlayerJoinedMessageCommand=update;
ScreenChangedMessageCommand=UpdateVisible; --]]
};
return text;
end
local t = Def.ActorFrame {
CreditsText( PLAYER_1 );
CreditsText( PLAYER_2 );
};
local t = Def.ActorFrame {};
return t;
@@ -1,4 +1,50 @@
local function CreditsText( pn )
function update(self)
local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
self:settext(str);
end
function UpdateVisible(self)
local screen = SCREENMAN:GetTopScreen();
local bShow = true;
if screen then
local sClass = screen:GetName();
bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
end
self:visible( bShow );
end
local text = LoadFont(Var "LoadingScreen","credits") .. {
InitCommand=function(self)
self:name("Credits" .. PlayerNumberToString(pn))
ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen");
end;
UpdateTextCommand=function(self)
local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
self:settext(str);
end;
UpdateVisibleCommand=function(self)
local screen = SCREENMAN:GetTopScreen();
local bShow = true;
if screen then
local sClass = screen:GetName();
bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
end
self:visible( bShow );
end;
--[[ RefreshCreditTextMessageCommand=update;
CoinInsertedMessageCommand=update;
PlayerJoinedMessageCommand=update;
ScreenChangedMessageCommand=UpdateVisible; --]]
};
return text;
end;
--
local t = Def.ActorFrame {
CreditsText( PLAYER_1 );
CreditsText( PLAYER_2 );
Def.ActorFrame {
Def.Quad {
InitCommand=cmd(zoomtowidth,SCREEN_WIDTH;zoomtoheight,30;horizalign,left;vertalign,top;y,SCREEN_TOP;diffuse,color("0,0,0,0"));
Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+26
View File
@@ -261,6 +261,7 @@ AdvanceExtraPixels=0
253=12
254=15
255=12
[alt]
0=10
1=10
@@ -390,3 +391,28 @@ AdvanceExtraPixels=0
125=12
126=6
127=7
[polish]
Baseline=23
Top=6
line 0=ĄĆĘŁŃŚŹŻ
line 1=ąćęłńśźż
0=15
1=10
2=12
3=12
4=12
5=12
6=13
7=13
8=11
9=11
10=11
11=6
12=11
13=10
14=10
15=10
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

+40 -9
View File
@@ -372,7 +372,7 @@ MaxTextureResolution=Choose the maximum texture resolution. Setting this to any
MenuTimer=When &oq;ON&cq;, menus have a time limit.
Mines=Mines
MoveRandomToEnd=Determines if courses with random songs should be placed at the end of the course select wheel.
MovieColorDepth=Choose the color depth of textures. 32 bit textures use more memory, but look nicer.
MovieColorDepth=Choose the color depth of movies. 32 bit textures use more memory, but look nicer.
MusicWheelSwitchSpeed=Adjusts the speed of the music wheel.
MusicWheelUsesSections=&oq;Always&cq; means sections in group + ABC; &oq;Never&cq; means no sections; &oq;Title Only&cq; shows sections in ABC order.
Network Options=Connect to a server or change server options.
@@ -656,6 +656,7 @@ Never=Never
New=New
NewEdit=-New Edit-
No=No
NoAttacks=No Attacks
NoHands=No Hands
NoHolds=No Holds
NoJumps=No Jumps
@@ -707,7 +708,8 @@ Skip=Skip
Skippy=Skippy
Slow=Slow
SN2=Supernova 2
SongAttacks=Song Attacks
SongAttacks=Step Attacks
StepAttacks=Step Attacks
Song BGAnimation=Song BGAnimation
Song Bitmap=Song Bitmap
Song Movie=Song Movie
@@ -800,6 +802,7 @@ CelShadeModels=Cel-shaded Models
Center Image=Center Image
Chaos=Chaos
Characters=Characters
Chart Name=Chart Name
Chart Style=Chart Style
Choose=Choose
Clear Bookkeeping Data=Clear Bookkeeping Data
@@ -807,13 +810,20 @@ Clear Machine Edits=Clear Machine Edits
Clear Machine Stats=Clear Machine Scores
Clear USB edits=Clear USB edits
Clear area=Clear area
Clear clipboard=Clear clipboard
CoinMode=Coin Mode
CoinModeNoHome=Coin Mode
CoinsPerCredit=Coins&nbsp;Per Credit
Connection=Connection
Convert pause to beats=Convert pause to beats
Convert selection to pause=Convert selection to pause
Convert pause to beats=Convert stop to beats
Convert delay to beats=Convert delay to beats
Convert selection to attack=Convert selection to Attack
Convert selection to pause=Convert selection to stop
Convert selection to delay=Convert selection to delay
Convert selection to warp=Convert selection to Warp Segment
Convert selection to fake=Convert selection to Fake Segment
Copy=Copy
Copy timing data=Copy timing data
CourseSortOrder=Course Sort
Create New=Create New
Create New Course=Create New
@@ -829,6 +839,8 @@ DelayedTextureDelete=Keep&nbsp;Textures In&nbsp;Memory
Delete=Delete
Delete beat and shift up=Delete beat and shift up
Description=Description
Designate as Music Preview=Designate as Music Preview
Designate last second at current beat=Designate last second at current beat
Difficulty=Difficulty
Display BPM=Display BPM
DisplayAspectRatio=Aspect Ratio
@@ -867,6 +879,7 @@ Entry %d=Entry %d
EventMode=Event Mode
Exit=Exit
Fail=Fail
Fakes=Fakes
FastLoad=Fast\nLoad
File1 Global BGAnimation=File1 Global BGAnimation
File1 Global Movie=File1 Global Movie
@@ -904,11 +917,13 @@ Insert=Insert
Insert Credit=Insert Credit
Insert beat and shift down=Insert beat and shift down
Insert Entry=Insert Entry
Invert notes' player=Invert player notes (routine only)
Jumps=Jumps
Key Joy Mappings=Config Key/Joy Mappings
Language=Language
Last beat hint=Last beat hint
Last second hint=Last second hint
Layer=Layer
Lifts=Lifts
LifeDifficulty=Life Difficulty
LifeType=Life Type
Low Meter=Low Meter
@@ -921,6 +936,8 @@ MenuTimer=Menu Timer
Meter=Meter
Min BPM=Min Specified BPM
Mines=Mines
Mirror Player 1 to 2=Mirror P1's notes to P2 (routine only)
Mirror Player 2 to 1=Mirror P2's notes to P1 (routine only)
MoveRandomToEnd=Random At&nbsp;End
More Options=More Options
MovieColorDepth=Movie Color
@@ -936,6 +953,7 @@ OsMountPlayer1=OS&nbsp;Mount Player1
OsMountPlayer2=OS&nbsp;Mount Player2
Paste at begin marker=Paste at begin marker
Paste at current beat=Paste at current beat
Paste timing data=Paste timing data
Persp=Persp
Play current beat to end=Play current beat to end
Play preview music=Play preview music
@@ -971,7 +989,8 @@ Remove Change=Remove Change
Rename=Rename
Reset To Defaults=Reset Options To Default Values
Revert from disk=Revert from disk
Revert to last save=Revert to last save
Revert to last save=Revert from cache
Rolls=Rolls
Save=Save
SaveScores=Save Scores
SaveReplays=Save Replays
@@ -1036,6 +1055,7 @@ Type=Type
Turn=Turn
Undo=Undo
UseUnlockSystem=Unlock System
View steps data=View Steps Data
VisualDelaySeconds=Visual Delay
Voltage=Voltage
Vsync=Wait For Vsync
@@ -1216,6 +1236,7 @@ Write Profiles=Write Profiles
off=off
on=on
or=or
Zoom In Camera=Zoom In Camera
[ScreenEdit]
%s notes=%s notes
@@ -1228,7 +1249,7 @@ Enter a new Stop value.=Enter a new Stop value.\n\nType "0" to remove.
Enter a new Delay value.=Enter a new Delay value.\n\nType "0" to remove.
Enter a new Time Signature.=Enter a new time signature.\nUse the format "x/y".\nEnter the previous value to remove.
Enter a new Tickcount value.=Enter a new Tickcount value.\n\nEnter the previous value to remove.
Enter a new Combo value.=Enter a new Combo value.\n\nEnter the previous value to remove.
Enter a new Combo value.=Enter a new Combo value.\nUse the format "x/y".\nEnter the previous value to remove.
Enter a new Label value.=Enter a name for this section of the chart.\n\nEnter a previously used label to remove.
Enter a new Warp value.=Enter the number of beats you will warp over.\n\nType "0" to remove this segment.
Enter a new Speed percent value.=Enter the ratio for speed scrolling.\nEnter the previous value to remove.\n1 is the default scroll.
@@ -1242,11 +1263,12 @@ Enter a new artist.=Enter a new artist.
Enter a new genre.=Enter a new genre.
Enter a new credit.=Enter a new credit.
Enter a new description.=Enter a new description.
Enter a new chart name.=Enter the name/title of this chart.
Enter a new chart style.=Enter a new chart style (e.g. "Pad", "Keyboard").
Enter a new meter.=Enter the difficulty rating for this chart.
Enter the author who made this step pattern.=Enter the author who made this step pattern.
Enter the offset for the song.=Enter the beat 0 offset for the song.
Enter a new last beat hint.=Enter a new last beat hint.
Enter a new last second hint.=Enter a new last second hint.
Enter a new main title transliteration.=Enter a new main title transliteration.
Enter a new main title.=Enter a new main title.
Enter a new sub title transliteration.=Enter a new sub title transliteration.
@@ -1257,7 +1279,7 @@ Enter a new min BPM.=Enter the minimum displayed BPM.
Enter a new max BPM.=Enter the maximum displayed BPM.
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\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:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF4:\n Timing Menu\nF1:\n Show help\n
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
PlayRecordHelpText=Press START to end
Save successful.=Save successful.
Saved as SM and DWI.=Saved as SM and DWI.
@@ -1269,6 +1291,7 @@ This change creates notes past the end of the music and is not allowed.=This cha
This will destroy all unsaved changes.=This will destroy all unsaved changes.
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.
Current beat=Current beat
Current second=Current second
@@ -1276,10 +1299,13 @@ Snap to=Snap to
Selection beat=Selection beat
Difficulty=Difficulty
Description=Description
Chart Name=Chart Name
Chart Style=Chart Style
Step Author=Step Author
Main title=Main title
Subtitle=Subtitle
Tap Note=Tap Note
Segment=Segment
Tap Steps=Tap Steps
Jumps=Jumps
Hands=Hands
@@ -1657,11 +1683,15 @@ Error adding file '%s'.=Error adding file '%s'.
Loading courses...=Loading courses...
Loading songs...=Loading songs...
Reloading...=Reloading...
Unloading songs...=Unloading songs...
Unloading courses...=Unloading courses...
The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song".=The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song" will contain the music file (MP3, OGG...), the steps file (.sm, .dwi, .ksf...) and other related files.
[SongUtil]
You must supply a name for your new edit.=You must supply a name for your new edit.
The name you chose conflicts with another chart. Please use a different name.=The name you chose conflicts with another chart. Please use a different name.
The name you chose conflicts with another edit. Please use a different name.=The name you chose conflicts with another edit. Please use a different name.
The chart name cannot contain any of the following characters: %s=The chart name cannot contain any of the following characters: %s
The edit name cannot contain any of the following characters: %s=The edit name can not contain any of the following characters: %s
The step author's name cannot contain any of the following characters: %s=The step author's name cannot contain any of the following characters: %s
@@ -1897,6 +1927,7 @@ P2=P2
[UnlockRewardType]
Song=Song
Steps=Steps
StepsType=StepsType
Course=Course
Modifier=Modifier
@@ -10,7 +10,7 @@
#BACKGROUND:;
#LYRICSPATH:;
#CDTITLE:;
#MUSIC:ScreenGameplaySyncMachine music.ogg;
#MUSIC:_sync music.ogg;
#OFFSET:-0.012;
#SAMPLESTART:0.000;
#SAMPLELENGTH:12.000;
@@ -26,6 +26,8 @@
#DIFFICULTY:Beginner;
#METER:1;
#RADARVALUES:0.302,0.205,0.000,0.000,0.000;
#BPMS:0.000=132.000;
#OFFSET:-0.012;
#NOTES:
// measure 1
0000
@@ -100,6 +102,8 @@
#DIFFICULTY:Beginner;
#METER:1;
#RADARVALUES:0.302,0.205,0.000,0.000,0.000;
#BPMS:0.000=132.000;
#OFFSET:-0.012;
#NOTES:
// measure 1
00000
@@ -13,6 +13,8 @@
#DESCRIPTION:BASIC;
#DIFFICULTY:easy;
#METER:1;
#BPMS:0.000=100.000;
#STOPS:16=2,18=2,20=2,22=2;
#RADARVALUES:0,0,0,0,0;
#NOTES:
0000
@@ -72,6 +74,8 @@
#DESCRIPTION:NORMAL;
#DIFFICULTY:easy;
#METER:1;
#BPMS:0.000=100.000;
#STOPS:16=2,18=2,20=2,22=2;
#RADARVALUES:0,0,0,0,0;
#NOTES:
00000
+1 -1
View File
@@ -20,4 +20,4 @@ local _screen = {
h = SCREEN_HEIGHT,
cx = SCREEN_CENTER_X,
cy = SCREEN_CENTER_Y
}
}
-9
View File
@@ -56,15 +56,6 @@ function ActorScroller:setfastcatchup(bFastCatchup)
self:SetFastCatchup(bFastCatchup)
end
-- renaming various StepMania functions to sm-ssc ones:
if ScreenString then
ScreenString = Screen.String
end
if ScreenMetric then
ScreenMetric = Screen.Metric
end
--[[ GameState ]]
--Aliases for old GAMESTATE timing functions.
--These have been converted to SongPosition, but most themes still use these old functions.
+59 -6
View File
@@ -83,6 +83,44 @@ local DropBezier =
function Actor:drop(t)
self:tween( t, "TweenType_Bezier", DropBezier );
end
-- compound tweens "combine multiple interpolators to allow generating more
-- complex tweens." length is how long to span the animation for, while
-- ... is either a string (e.g. "linear,0.25,accelerate,0.75") or a table
-- with the tween information.
function Actor:compound(length,...)
local tweens = ...
if type(tweens) == "string" then
local parsed = split(";",tweens)
tweens = {} -- convert to table
for i,s in pairs(parsed) do
local res = split(",",s)
tweens[i] = {
Type = res[1],
Percent = res[2],
Bezier = res[3] or nil
}
end
end
for i,t in pairs(tweens) do
if t.Type == "linear" then self:linear(t.Percent*length)
elseif t.Type == "accelerate" then self:accelerate(t.Percent*length)
elseif t.Type == "decelerate" then self:decelerate(t.Percent*length)
elseif t.Type == "spring" then self:spring(t.Percent*length)
elseif t.Type == "bouncebegin" then self:bouncebegin(t.Percent*length)
elseif t.Type == "bounceend" then self:bounceend(t.Percent*length)
elseif t.Type == "smooth" then self:smooth(t.Percent*length)
elseif t.Type == "drop" then self:smooth(t.Percent*length)
--elseif t.Type == "ease" then self:ease(t.Percent*length)
elseif t.Type == "bezier" then
-- todo: handle using tween and 'TweenType_Bezier'
end
end
end
-- Hide if b is true, but don't unhide if b is false.
function Actor:hide_if(b)
if b then
@@ -114,17 +152,32 @@ function Actor:FullScreen()
end
--[[ Typical background sizes:
320x240 - DDR 1st-Extreme, most NVLM_ZK songs
640x480 - most simfiles in distribution today are this big.
768x480 - 16:10 aspect ratio backgrounds
854x480 - pump it up pro
320x240 - [4:3]
640x480 - [4:3] (most simfiles in distribution today use this res.)
768x480 - [16:10]
854x480 - [16:9]
]]
-- "Most backgrounds are 640x480. Some are 768x480. Stretch the 4:3 ones."
function Actor:scale_or_crop_background()
if (self:GetWidth() * 3) / 4 == self:GetHeight() then
local gw = self:GetWidth()
local gh = self:GetHeight()
local graphicAspect = gw/gh
local displayAspect = DISPLAY:GetDisplayWidth()/DISPLAY:GetDisplayHeight()
if graphicAspect == displayAspect then
-- bga matches the current aspect, we can stretch it.
self:stretchto( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT );
else
-- temp
self:scaletocover( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT );
--[[
-- bga doesn't match the aspect.
if displayAspect > graphicAspect then
-- the graphic is smaller than the display aspect ratio
else
-- the graphic is bigger than the display aspect ratio; crop me
end
--]]
end
end
+9 -2
View File
@@ -65,7 +65,11 @@ Branch = {
if SONGMAN:GetNumSongs() == 0 and SONGMAN:GetNumAdditionalSongs() == 0 then
return "ScreenHowToInstallSongs";
end;
return "ScreenSelectProfile";
if PROFILEMAN:GetNumLocalProfiles() >= 2 then
return "ScreenSelectProfile";
else
return "ScreenProfileLoad";
end
end,
OptionsEdit = function()
-- Similar to above, don't let anyone in here with 0 songs.
@@ -75,7 +79,7 @@ Branch = {
return "ScreenOptionsEdit";
end,
AfterProfileLoad = function()
return "ScreenSelectProfile"
return Branch.AfterSelectProfile()
end,
AfterSelectProfile = function()
if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then
@@ -189,4 +193,7 @@ Branch = {
Network = function()
return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu"
end,
AfterSaveSummary = function()
return GAMESTATE:AnyPlayerHasRankingFeats() and "ScreenNameEntryTraditional" or "ScreenGameOver"
end,
}
+6 -7
View File
@@ -1,5 +1,5 @@
-- SSC Color Module and Library
local nilColor = color("0,0,0,0")
-- Original Color Module.
Color = {
-- Color Library
@@ -16,7 +16,7 @@ Color = {
Purple = color("#92278f"),
Outline = color("0,0,0,0.5"),
Invisible = color("1,1,1,0"),
Stealth = nilColor,
Stealth = color("0,0,0,0"),
-- Color Functions
-- These functions alter colors in a certain way so that you can make
-- new ones without having to copy a color or find a new one.
@@ -30,8 +30,11 @@ Color = {
return { c[1],c[2],c[3],fAlpha };
end
}
setmetatable(Color, { __call = function(self, c) return self[c] end })
-- Remapped Color Module, since some themes are crazy
Colors = Color;
-- Colors = Color;
GameColor = {
PlayerColors = {
@@ -95,10 +98,6 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"];
GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"];
--[[ Fallbacks ]]
function Color(c)
return Colors[c]
end
function BoostColor( cColor, fBoost )
local c = cColor
return { c[1]*fBoost, c[2]*fBoost, c[3]*fBoost, c[4] }
+11 -10
View File
@@ -98,16 +98,17 @@ end
-- Get a metric from the currently-loading screen. This is only valid while loading
-- an actor, such as from File or InitCommand attributes; not from commands.
Screen = {
Metric = function ( sName )
local sClass = Var "LoadingScreen"
return THEME:GetMetric( sClass, sName )
end,
String = function ( sName )
local sClass = Var "LoadingScreen";
return THEME:GetString( sClass, sName )
end
};
Screen.Metric = function ( sName )
local sClass = Var "LoadingScreen"
return THEME:GetMetric( sClass, sName )
end
ScreenMetric = Screen.Metric
Screen.String = function ( sName )
local sClass = Var "LoadingScreen";
return THEME:GetString( sClass, sName )
end
ScreenString = Screen.String
function TextBannerAfterSet(self,param)
local Title=self:GetChild("Title");
+30 -13
View File
@@ -13,23 +13,41 @@ function AreStageSongModsForced()
return bExtraStage or bOni or bBattle or bRave
end
function SetFail()
local sFail = "";
if GetGamePref("DefaultFail") then
sFail = string.format("Fail%s", GetGamePref("DefaultFail"));
else
sFail = "FailOff";
end
sFail = tostring(sFail);
-- SCREENMAN:SystemMessage( 'NEW FAIL IS: ' .. tostring(sFail) );
for pn in ivalues(GAMESTATE:GetHumanPlayers()) do
-- GAMESTATE:ApplyGameCommand( "stagemod,FailImmediateContinue", pn );
-- GAMESTATE:GetPlayerState(pn):SetPlayerOptions( "ModsLevel_Song", 'mod,FailImmediateContinue' );
MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} );
end
-- GAMESTATE:SetSongOptions( "ModsLevel_Preferred", 'mod,FailImmediateContinue' );
-- GAMESTATE:SetSongOptions( "ModsLevel_Stage", 'mod,FailImmediateContinue' );
-- GAMESTATE:SetSongOptions( "ModsLevel_Song",'mod,FailImmediateContinue' );
GAMESTATE:ApplyGameCommand( "mod," .. sFail);
-- GAMESTATE:ApplyGameCommand( "stagemod,FailImmediateContinue");
MESSAGEMAN:Broadcast( "SongOptionsChanged" );
end
function ScreenSelectMusic:setupmusicstagemods()
Trace( "setupmusicstagemods" )
local pm = GAMESTATE:GetPlayMode()
if pm == "PlayMode_Battle" or pm == "PlayMode_Rave" then
-- FIX DAT BUG;
local sFail = "";
if GetGamePref("DefaultFail") then
sFail = string.format("Fail%s", GetGamePref("DefaultFail") );
else
sFail = "Failoff";
end;
--
local so = GAMESTATE:GetDefaultSongOptions() .. "," .. sFail;
local so = GAMESTATE:GetDefaultSongOptions();
GAMESTATE:SetSongOptions( "ModsLevel_Stage", so );
MESSAGEMAN:Broadcast( "SongOptionsChanged" );
elseif GAMESTATE:IsAnExtraStage() then
elseif GAMESTATE:IsAnExtraStage() then
if GAMESTATE:GetPreferredSongGroup() == "---Group All---" then
local song = GAMESTATE:GetCurrentSong()
GAMESTATE:SetPreferredSongGroup( song:GetGroupName() )
@@ -46,6 +64,7 @@ function ScreenSelectMusic:setupmusicstagemods()
po = THEME:GetMetric("SongManager","ExtraStagePlayerModifiers");
so = THEME:GetMetric("SongManager","ExtraStageStageModifiers");
end
local difficulty = steps:GetDifficulty()
local Reverse = PlayerNumber:Reverse()
@@ -58,8 +77,6 @@ function ScreenSelectMusic:setupmusicstagemods()
GAMESTATE:SetPreferredDifficulty( pn, difficulty )
MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} )
end
GAMESTATE:SetSongOptions( "ModsLevel_Stage", so )
MESSAGEMAN:Broadcast( "SongOptionsChanged" )
+15 -13
View File
@@ -1,9 +1,12 @@
--[[
Custom Speed Mods v2.0 (for sm-ssc)
Custom Speed Mods v2.1 (for StepMania 5)
by AJ Kelly of KKI Labs ( http://kki.ajworld.net/ )
changelog:
v2.1 (StepMania 5 Preview 2)
* Added support for m-Mods.
v2.0 (for sm-ssc)
Giant rewrite of the speed mod parser.
This rewrite comes with the following changes/features:
@@ -38,9 +41,6 @@ v1.2
v1.1
* Cleaned up code some, I think.
________________________________________________________________________________
anticipated future changes:
* M-Mod support (when sm-ssc integrates it)
]]
-- ProfileDir(slot): gets the profile dir for slot,
@@ -68,7 +68,7 @@ local function ParseSpeedModFile(path)
return mods
else
-- error; write a fallback mod file and return it
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C200,C400"
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C250,C450,m550"
Trace("[CustomSpeedMods]: Could not read SpeedMods; writing fallback to "..path)
file:Open(path, 2)
file:Write(fallbackString)
@@ -148,8 +148,8 @@ end
local function SpeedModSort(tab)
local xMods = {}
local mMods = {}
local cMods = {}
--local mMods = {}
-- convert to numbers so sorting works:
for i=1,#tab do
@@ -159,10 +159,10 @@ local function SpeedModSort(tab)
if string.find(tab[i],"C%d") then
typ = cMods
val = string.gsub(tab[i], "C", "")
elseif string.find(tab[i],"M%d") then
Trace("[CustomSpeedMods] OpenITG's M-Mods are not supported yet in sm-ssc.")
--typ = mMods
--val = string.gsub(tab[i], "M", "")
-- support both cases because I want to hit people -freem
elseif string.find(tab[i],"m%d") or string.find(tab[i],"M%d") then
typ = mMods
val = string.gsub(tab[i], "m", "")
else
typ = xMods
val = string.gsub(tab[i], "x", "")
@@ -175,7 +175,7 @@ local function SpeedModSort(tab)
-- sort cMods
cMods = AnonSort(cMods)
-- sort mMods
--mMods = AnonSort(mMods)
mMods = AnonSort(mMods)
local fin = {}
-- convert it back to a string since that's what it expects
for i=1,#xMods do
@@ -184,7 +184,9 @@ local function SpeedModSort(tab)
for i=1,#cMods do
table.insert(fin, "C"..cMods[i])
end
--for i=1,#mMods do table.insert(fin, "M"..mMods[i]); end;
for i=1,#mMods do
table.insert(fin, "m"..mMods[i])
end
return fin
end
@@ -295,7 +297,7 @@ function SpeedMods()
end
--[[
Copyright © 2008-2009 AJ Kelly/KKI Labs.
Copyright © 2008-2011 AJ Kelly/KKI Labs.
Use freely, so long this notice and the above documentation remains.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+11 -3
View File
@@ -11,7 +11,7 @@ function GetExtraColorThreshold()
sGame = GAMESTATE:GetCurrentGame():GetName()
local Modes = {
dance = 10,
pump = 15,
pump = 21,
beat = 12,
kb7 = 10,
para = 10,
@@ -105,6 +105,10 @@ function ComboPerRow()
end
end
function EvalUsesCheckpointsWithJudgments()
return (GAMESTATE:GetCurrentGame():GetName() == "pump") and true or false
end
-- these need cleanup really.
function HitCombo()
sGame = GAMESTATE:GetCurrentGame():GetName()
@@ -183,7 +187,11 @@ function HoldTiming()
end
function ShowHoldJudgments()
return not GAMESTATE:GetCurrentGame():GetName() == "pump"
if GAMESTATE:GetCurrentGame():GetName() == "pump" then
return false
else
return true
end
end
function HoldHeadStep()
@@ -267,4 +275,4 @@ end
function ComboUnderField()
return GetUserPrefB("UserPrefComboUnderField")
end
end
+12
View File
@@ -246,4 +246,16 @@ function Hue(color,newHue)
end
c.Hue = newHue
return HSVToColor(c)
end;
function Alpha(color,percent)
local c = ColorToHSV(color);
-- error checking
if percent < 0 then
percent = 0.0;
elseif percent > 1 then
percent = 1.0;
end;
c.Alpha = percent;
return HSVToColor(c);
end;
@@ -148,7 +148,9 @@ end
-- MaskSource([clearzbuffer])
-- Sets an actor up as the source for a mask. Clears zBuffer by default.
function Actor:MaskSource(noclear)
self:clearzbuffer(noclear or true)
if noclear == true then
self:clearzbuffer(true)
end
self:zwrite(true)
self:blend('BlendMode_NoEffect')
end
@@ -224,10 +226,10 @@ end;
--[[ ----------------------------------------------------------------------- ]]
--[[ profile stuff ]]
-- Profile(pn)
-- GetPlayerOrMachineProfile(pn)
-- This returns a profile, preferably a player one.
-- If there isn't one, we fall back on the machine profile.
function Profile(pn)
function GetPlayerOrMachineProfile(pn)
if PROFILEMAN:IsPersistentProfile(pn) then
-- player profile
return PROFILEMAN:GetProfile(pn);
+1 -1
View File
@@ -150,7 +150,7 @@ function InitUserPrefs()
end;
function UserPrefScoringMode()
local baseChoices = { 'DDR 1stMIX', 'DDR 4thMIX', 'DDR Extreme', 'DDR SuperNOVA', 'DDR SuperNOVA 2', 'MIGS' }; --'[SSC] Radar Master'
local baseChoices = { 'DDR 1stMIX', 'DDR 4thMIX', 'DDR Extreme', 'DDR SuperNOVA', 'DDR SuperNOVA 2', 'MIGS', 'HYBRID' }; --'[SSC] Radar Master'
local t = {
Name = "UserPrefScoringMode";
LayoutType = "ShowAllInRow";
+85 -20
View File
@@ -67,7 +67,7 @@ r['DDR 4thMIX'] = function(params, pss)
local capScore = 999999999;
local bestPoints = scoreLookupTable['TapNoteScore_W1'];
local bestCombo = bestPoints and comboBonusForThisStep or 0;
pss:SeCurMaxScore(clamp(pss:GeCurMaxScore()+bestPoints+bestCombo,0,capScore));
pss:SetCurMaxScore(clamp(pss:GetCurMaxScore()+bestPoints+bestCombo,0,capScore));
local localPoints = scoreLookupTable[params.TapNoteScore];
local localCombo = localPoints and comboBonusForThisStep or 0;
pss:SetScore(clamp(pss:GetScore()+localPoints+localCombo,0,capScore));
@@ -84,14 +84,19 @@ r['DDR Extreme'] = function(params, pss)
setmetatable(judgmentBase, ZeroIfNotFound);
local steps = GAMESTATE:GetCurrentSteps(params.Player);
local radarValues = steps:GetRadarValues(params.Player);
local baseScore = (steps:IsAnEdit() and
5 or steps:GetMeter()) * 1000000;
local meter = steps:GetMeter();
if (steps:IsAnEdit()) then
meter = 5;
elseif (meter < 1) then
meter = 1;
elseif (meter > 10) then
meter = 10;
end;
local baseScore = meter * 1000000;
if (GAMESTATE:GetCurrentSong():IsMarathon()) then
baseScore = baseScore * 3;
else
if (GAMESTATE:GetCurrentSong():IsLong()) then
baseScore = baseScore * 2;
end;
elseif (GAMESTATE:GetCurrentSong():IsLong()) then
baseScore = baseScore * 2;
end;
local totalItems = GetTotalItems(radarValues);
local singleStep = (1 + totalItems) * totalItems / 2;
@@ -122,6 +127,47 @@ r['DDR Extreme'] = function(params, pss)
Shared.CurrentStep[pn] = 0; -- Reset for the next song.
end;
end;
-----------------------------------------------------------
--HYBRID Scoring
-----------------------------------------------------------
r['HYBRID'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 10,
['TapNoteScore_W2'] = 9,
['TapNoteScore_W3'] = 5
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
local totalItems = GetTotalItems(radarValues);
-- 1+2+3+...+totalItems の値
local sTotal = (totalItems+1)*totalItems/2;
-- [en] Score for one song
-- [ja] 1つあたりのスコア
local sOne = math.floor(100000000/sTotal);
-- [ja] 端数は最後の1ステップで加算するのでその値を取得
local sLast = 100000000-(sOne*sTotal);
-- [ja] 現在何個目の譜面か
pss:SetCurMaxScore(pss:GetCurMaxScore()+1);
-- [en] current score
-- [ja] 今回のスコア
local vScore = sOne*(pss:GetCurMaxScore());
if (params.HoldNoteScore == 'HoldNoteScore_Held') then
vScore = vScore;
else
if (params.HoldNoteScore == 'HoldNoteScore_LetGo') then
vScore = 0;
else
vScore = vScore*multLookup[params.TapNoteScore]/10;
end;
end;
if ((vScore > 0) and (pss:GetCurMaxScore() == totalItems)) then
vScore = vScore+sLast;
end;
pss:SetScore(pss:GetScore()+vScore);
end;
-----------------------------------------------------------
--DDR SuperNOVA(-esque) scoring
-----------------------------------------------------------
@@ -148,24 +194,43 @@ end;
r['DDR SuperNOVA 2'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 1,
['TapNoteScore_W2'] = 1,
['TapNoteScore_W3'] = 0.5
['TapNoteScore_W1'] = 10,
['TapNoteScore_W2'] = 10,
['TapNoteScore_W3'] = 5
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
local totalItems = GetTotalItems(radarValues);
local base = 100000 / totalItems;
local hold = base * (params.HoldNoteScore == 'HoldNoteScore_Held' and 1 or 0);
local maxScore = (base * multLookup['TapNoteScore_W1']) + hold;
pss:SetCurMaxScore(pss:GetCurMaxScore() + (math.round(maxScore) * 10));
local preW1 = base * multLookup[params.TapNoteScore];
local buildScore = (preW1 - (IsW1Allowed(params.TapNoteScore) and 10 or 0)) + hold;
pss:SetScore(pss:GetScore() + (math.round(buildScore) * 10));
local totalItems = GetTotalItems(radarValues);
-- handle holds
local maxAdd = 0;
if params.HoldNoteScore == 'HoldNoteScore_Held' then
maxAdd = 10;
elseif params.HoldNoteScore == 'HoldNoteScore_LetGo' then
maxAdd = 0;
else
maxAdd = multLookup[params.TapNoteScore];
if params.TapNoteScore == 'TapNoteScore_W2' or 'TapNoteScore_W3' then
-- [ja] 超最終手段
pss:SetCurMaxScore( pss:GetCurMaxScore() + 1000000 );
end;
end;
pss:SetCurMaxScore(pss:GetCurMaxScore() + maxAdd);
--[[
[ja] パフェ数取得 この方法で取得するとロングノートの場合2つカウントされる そのため使えない
pss:GetTapNoteScores('TapNoteScore_W2')
仕方がないのでパフェ数を 1000000 単位で GetCurMaxScore に記録
その後、情報を分解して取り出す
--]]
local vScore = pss:GetCurMaxScore() % 1000000
local vSub = math.floor( pss:GetCurMaxScore()/1000000 )
pss:SetScore( math.floor(10000*vScore/totalItems) * 10 - (vSub*10) );
end;
-----------------------------------------------------------
--Radar Master (doesn't work in 1.2.1, disabled)
--don't try to "fix it up", either. you *cannot* make it work in 1.2.1.
--Radar Master (doesn't work in sm-ssc 1.2.1, disabled)
--todo: get this working with StepMania 5
-----------------------------------------------------------
r['[SSC] Radar Master'] = function(params, pss)
local masterTable = {
+118 -118
View File
@@ -28,7 +28,7 @@ ScreenHeight=480
AutoSetStyle=GetUserPrefB("UserPrefAutoSetStyle")
# Default modifiers and noteskin.
DefaultModifiers="default,1.5x"
DefaultModifiers="1x"
DefaultNoteSkinName="default"
# Difficulties to show. Useful for custom games where you want to hide these.
@@ -124,6 +124,8 @@ ExtraColor=color("#ff0000") -- red
[UnlockManager]
# Unlock specific things.
AutoLockChallengeSteps=false
AutoLockEditSteps=false
SongsNotAdditional=true
UnlockNames=""
# useful commands:
@@ -200,6 +202,8 @@ BeatOffsetHeight=15
BeatPIHeight=2
MiniPercentBase=0.5
MiniPercentGate=1
TinyPercentBase=0.5
TinyPercentGate=1
DizzyHoldHeads=false
QuantizeArrowYPosition=false
@@ -411,72 +415,7 @@ SortLevel5Color=color("0,1,0,1")
# Custom system that lets you rename certain classes of difficulties to
# something else. Mostly for custom games and game emulation, PIU for example.
# The names of which
Names="PumpHard,PumpFreestyle,PumpNightmare,PumpHalfDouble,PumpRoutine"
# Names="DanceCoupleBeginner,DanceCoupleEasy,DanceCoupleMedium,DanceCoupleHard,DanceCoupleExpert,PumpHard"
# That get remapped to
DanceCoupleBeginnerStepsType="StepsType_Dance_Couple"
DanceCoupleBeginnerDifficulty="Difficulty_Beginner"
DanceCoupleBeginnerCourseType=nil
DanceCoupleBeginnerString="Beginner"
#--#
DanceCoupleEasyStepsType="StepsType_Dance_Couple"
DanceCoupleEasyDifficulty="Difficulty_Easy"
DanceCoupleEasyCourseType=nil
DanceCoupleEasyString="Easy"
#--#
DanceCoupleMediumStepsType="StepsType_Dance_Couple"
DanceCoupleMediumDifficulty="Difficulty_Medium"
DanceCoupleMediumCourseType=nil
DanceCoupleMediumString="Medium"
#--#
DanceCoupleHardStepsType="StepsType_Dance_Couple"
DanceCoupleHardDifficulty="Difficulty_Hard"
DanceCoupleHardCourseType=nil
DanceCoupleHardString="Hard"
#--#
DanceCoupleExpertStepsType="StepsType_Dance_Couple"
DanceCoupleExpertDifficulty="Difficulty_Expert"
DanceCoupleExpertCourseType=nil
DanceCoupleExpertString="Expert"
#===#
PumpHardStepsType="StepsType_Pump_Single"
PumpHardDifficulty="Difficulty_Hard"
PumpHardCourseType=nil
PumpHardString="Crazy"
#--#
PumpFreestyleStepsType="StepsType_Pump_Double"
PumpFreestyleDifficulty="Difficulty_Medium"
PumpFreestyleCourseType=nil
PumpFreestyleString="Freestyle"
#--#
PumpNightmareStepsType="StepsType_Pump_Double"
PumpNightmareDifficulty="Difficulty_Hard"
PumpNightmareCourseType=nil
PumpNightmareString="Nightmare"
#--#
PumpHalfDoubleStepsType="StepsType_Pump_Halfdouble"
PumpHalfDoubleDifficulty="Difficulty_Medium"
PumpHalfDoubleCourseType=nil
PumpHalfDoubleString="HalfDouble"
#--#
PumpRoutineStepsType="StepsType_Pump_Routine"
PumpRoutineDifficulty="Difficulty_Medium"
PumpRoutineCourseType=nil
PumpRoutineString="Routine"
#
# Difficulty_Beginner-StepsType_Pump_Single=Easy
# Difficulty_Easy-StepsType_Pump_Single=Normal
# Difficulty_Medium-StepsType_Pump_Single=Hard
# Difficulty_Hard-StepsType_Pump_Single=Crazy
# Difficulty_Medium-StepsType_Pump_Halfdouble=Half-Double
# Difficulty_Medium-StepsType_Pump_Double=Freestyle
# Difficulty_Hard-StepsType_Pump_Double=Nightmare
# Difficulty_Edit-StepsType_Pump_Single=Edit
# Difficulty_Edit-StepsType_Pump_Halfdouble=Edit
# Difficulty_Edit-StepsType_Pump_Double=Edit
# Course=Progressive
Names=
[DifficultyList]
# A list that shows difficulties in a song.
@@ -606,7 +545,19 @@ OverY=0
[LifeMeterBattery]
# The bar that shows up in Oni mode.
# any score below this one will cause you to lose a life.
MinScoreToKeepLife='TapNoteScore_W3'
# how many lives you'll lose upon doing so.
SubtractLives=1
# how many lives you'll lose hitting a mine
MinesSubtractLives=1
# how many lives a successful hold will net you.
HeldAddLives=0
# how many lives an unsuccessful hold will cost you.
LetGoSubtractLives=1
# How many lives trigger the "Danger" state.
DangerThreshold=1
# How long it flashes when you lose a life.
BatteryBlinkTime=1.2
# Where the batteries are
@@ -614,11 +565,16 @@ BatteryP1X=-92
BatteryP1Y=2
BatteryP2X=92
BatteryP2Y=2
# Where your live count is
# Where your life count is
NumLivesFormat="x%d"
NumLivesP1X=-92
NumLivesP1Y=0
NumLivesP1GainLifeCommand=
NumLivesP1LoseLifeCommand=zoom,1.5;linear,0.15;zoom,1
NumLivesP2X=92
NumLivesP2Y=0
NumLivesP2GainLifeCommand=
NumLivesP2LoseLifeCommand=zoom,1.5;linear,0.15;zoom,1
[LifeMeterBattery Percent]
# The percentage on the bar. I wouldn't even bother changing this, because I
@@ -1012,8 +968,8 @@ StopOffsetX=50
DelayOffsetX=120
WarpOffsetX=90
TimeSignatureOffsetX=30
TickcountOffsetX=70
ComboOffsetX=50
TickcountOffsetX=50
ComboOffsetX=70
LabelOffsetX=130
SpeedOffsetX=30
ScrollOffsetX=100
@@ -1067,7 +1023,8 @@ CheckpointsUseTickcounts=(GAMESTATE:GetCurrentGame():GetName() == "pump")
; deprecated?
CheckpointsUseTimeSignatures=false
CheckpointsTapsSeparateJudgment=CheckpointsTapsSeparateJudgment()
CheckpointsFlashOnHold=false
; someone misunderstood me :x -Daisu
CheckpointsFlashOnHold=(GAMESTATE:GetCurrentGame():GetName() == "pump")
ImmediateHoldLetGo=ImmediateHoldLetGo()
RequireStepOnHoldHeads=HoldHeadStep()
RequireStepOnMines=false
@@ -1081,6 +1038,7 @@ ComboStoppedAt=50
AttackRunTimeRandom=6
AttackRunTimeMine=7
BattleRaveMirror=true
MModHighCap=600
[PlayerOptions]
RandomSpeedChance=0.2
@@ -1527,7 +1485,7 @@ AllowRepeatingInput=false
PreSwitchPageSeconds=0
PostSwitchPageSeconds=0
ScrollerSecondsPerItem=0
ScrollerNumItemsToDraw=1024
ScrollerNumItemsToDraw=16
ScrollerTransform=function(self,offset,itemIndex,numItems) end
ScrollerSubdivisions=1
OverrideSleepAfterTweenOffSeconds=false
@@ -1791,8 +1749,7 @@ CodeUp="+MenuUp"
CodeUp2="+Up"
CodeDown="+MenuDown"
CodeDown2="+Down"
# Holding Start let us skip ( annoying )
CodeStart="~Start,+Start"
CodeStart="+Start"
CodeBack="Back"
CodeCenter="Center"
CodeDownLeft="DownLeft"
@@ -1817,6 +1774,7 @@ ChoiceDouble="name,Double;style,double;text,Double;screen,"..Branch.AfterSelectP
ChoiceSolo="name,Solo;style,solo;text,Solo;screen,"..Branch.AfterSelectPlayMode()
ChoiceVersus="name,Versus;style,versus;text,Versus;screen,"..Branch.AfterSelectPlayMode()
ChoiceCouple="name,Couple;style,couple;text,Couple;screen,"..Branch.AfterSelectPlayMode()
ChoiceRoutine="name,Routine;style,routine;text,Routine;screen,"..Branch.AfterSelectPlayMode()
ChoiceHalfDouble="name,HalfDouble;style,halfdouble;text,HalfDouble;screen,"..Branch.AfterSelectPlayMode()
Choice5Keys="name,5Keys;style,single5;text,5Keys;screen,"..Branch.AfterSelectPlayMode()
Choice7Keys="name,7Keys;style,single7;text,7Keys;screen,"..Branch.AfterSelectPlayMode()
@@ -2064,7 +2022,8 @@ ForceTimer=true
TimerMetricsGroup="MenuTimerNoSound"
TimerSeconds=5
#
ScreenBeginCommand=%SetFail
#
[ScreenOptions]
Fallback="ScreenWithMenuElements"
NavigationMode="normal"
@@ -2134,6 +2093,7 @@ OptionRowExitMetricsGroup="OptionRowExit"
Fallback="ScreenOptions"
Class="ScreenOptionsMaster"
NoteSkinSortOrder=""
StepsUseChartName=false
# ExitItem is an exit row with the "Exit" text as a menu item; ExitTitle
# uses the menu title.
@@ -2177,22 +2137,23 @@ Accel,5="mod,boomerang;name,Boomerang"
# Accel,5="mod,expand;name,Expand"
# Accel,6="mod,boomerang;name,Boomerang"
Effect="14;selectmultiple"
Effect="15;selectmultiple"
EffectDefault="mod,no drunk,no dizzy,,no twirl,no roll,no confusion,no mini,no tiny,no flip,no invert,no tornado,no tipsy,no bumpy,no beat,no xmode"
Effect,1="mod,drunk;name,Drunk"
Effect,2="mod,dizzy;name,Dizzy"
Effect,3="mod,twirl;name,Twirl"
Effect,4="mod,roll;name,Roll"
Effect,5="mod,confusion;name,Confusion"
Effect,6="mod,tiny;name,Tiny"
Effect,7="mod,-100% mini;name,Big"
Effect,8="mod,flip;name,Flip"
Effect,9="mod,invert;name,Invert"
Effect,10="mod,tornado;name,Tornado"
Effect,11="mod,tipsy;name,Tipsy"
Effect,12="mod,bumpy;name,Bumpy"
Effect,13="mod,beat;name,Beat"
Effect,14="mod,45% xmode;name,XMode"
Effect,6="mod,mini;name,Mini"
Effect,7="mod,tiny;name,Tiny"
Effect,8="mod,-100% mini;name,Big"
Effect,9="mod,flip;name,Flip"
Effect,10="mod,invert;name,Invert"
Effect,11="mod,tornado;name,Tornado"
Effect,12="mod,tipsy;name,Tipsy"
Effect,13="mod,bumpy;name,Bumpy"
Effect,14="mod,beat;name,Beat"
Effect,15="mod,45% xmode;name,XMode"
EffectsReceptor="selectmultiple"
EffectsReceptorDefault=""
@@ -2335,18 +2296,11 @@ Mines,2="name,On"
Mines,3="mod,mines;name,Add"
Mines,4="mod,attackmines;name,AttackMines"
# Mines="4"
# MinesDefault="mod,no nomines,no mines, no attackmines"
# Mines,1="mod,nomines;name,Off"
# Mines,2="name,On"
# Mines,3="mod,mines;name,Add"
# Mines,4="mod,attackmines;name,AttackMines"
Attacks="3"
AttacksDefault="mod,songattacks"
Attacks,3="mod,no randomattacks,no songattacks;name,Off"
AttacksDefault="mod,no randomattacks, no noattacks"
Attacks,1="name,On"
Attacks,2="mod,randomattacks;name,RandomAttacks"
Attacks,1="name,SongAttacks"
Attacks,3="mod,noattacks;name,Off"
PlayerAutoPlay="2"
PlayerAutoPlayDefault="mod,no playerautoplay"
@@ -2357,7 +2311,7 @@ Hide="3;selectmultiple"
HideDefault="mod,no dark,no blind,no cover"
Hide,1="mod,dark;name,Dark"
Hide,2="mod,blind;name,Blind"
Hide,3="mod,60% cover;name,Cover"
Hide,3="mod,80% cover;name,Cover"
# Hide="3"
# HideDefault="mod,no dark,no blind"
@@ -2373,12 +2327,6 @@ Persp,3="mod,space;name,Space"
Persp,4="mod,hallway;name,Hallway"
Persp,5="mod,distant;name,Distant"
ScoreDisplay="3"
ScoreDisplayDefault="mod,addscore"
ScoreDisplay,1="mod,addscore;name,Add"
ScoreDisplay,2="mod,subtractscore;name,Subtract"
ScoreDisplay,3="mod,averagescore;name,Average"
# Song options
# LifeType="3;together"
LifeType=(GAMESTATE:IsCourseMode() and 3 or 2)..";together"
@@ -2507,6 +2455,7 @@ LineHighlightP2ChangeToExitCommand=
CursorOnCommand=visible,false
[ScreenOptionsService]
AllowOperatorMenuButton=false
Class="ScreenOptionsMaster"
Fallback="ScreenOptionsSimpleService"
#
@@ -2884,7 +2833,6 @@ Line11="list,Attacks"
Line12="list,PlayerAutoPlay"
Line13="list,Hide"
Line14="list,Persp"
Line15="list,ScoreDisplay"
Line16="list,Steps"
Line17="list,Characters"
@@ -3276,10 +3224,13 @@ PlayerType="PlayerShared"
Class="ScreenEvaluation"
Fallback="ScreenWithMenuElements"
#
NextScreen=Branch.AfterEvaluation()
PrevScreen=Branch.AfterEvaluation()
#
LightsMode="LightsMode_MenuStartOnly"
#
Summary=false
CheckpointsWithJudgments=false
CheckpointsWithJudgments=EvalUsesCheckpointsWithJudgments()
#
TimerSeconds=20
#
@@ -3361,30 +3312,34 @@ DetailLineFormat="%3d/%3d"
[ScreenEvaluationNormal]
Fallback="ScreenEvaluation"
#
NextScreen="ScreenProfileSave"
NextScreen=Branch.AfterEvaluation()
PrevScreen=Branch.AfterEvaluation()
[ScreenEvaluationSummary]
Fallback="ScreenEvaluation"
#
NextScreen="ScreenSelectMusic"
NextScreen=Branch.AfterSummary()
#
Summary=true
#
[ScreenNameEntry]
# !!! #
Class="ScreenNameEntry"
Fallback="ScreenWithMenuElementsBlank"
#
TimerX=SCREEN_CENTER_X+0
TimerY=SCREEN_CENTER_Y-210
#
CategoryY=SCREEN_CENTER_Y+190
CategoryZoom=0.7
#
CharsZoomSmall=1.0
CharsZoomLarge=1.5
CharsSpacingY=40
CharsChoices=" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ScrollingCharsCommand=diffuse,0.6,0.8,0.8,1
SelectedCharsCommand=diffuse,0.8,1,1,1
#
ReceptorArrowsY=SCREEN_CENTER_Y-140
NumCharsToDrawBehind=2
NumCharsToDrawTotal=10
@@ -3394,7 +3349,9 @@ TimerSeconds=24
TimerStealth=false
ShowStyleIcon=false
MaxRankingNameLength=4
#
NextScreen="ScreenProfileSave"
#
PlayerP1OnePlayerOneSideX=SCREEN_CENTER_X-160
PlayerP2OnePlayerOneSideX=SCREEN_CENTER_X+160
PlayerP1TwoPlayersTwoSidesX=SCREEN_CENTER_X-160
@@ -3402,6 +3359,31 @@ PlayerP2TwoPlayersTwoSidesX=SCREEN_CENTER_X+160
PlayerP1OnePlayerTwoSidesX=SCREEN_CENTER_X
PlayerP2OnePlayerTwoSidesX=SCREEN_CENTER_X
[ScreenNameEntryTraditional]
Class="ScreenNameEntryTraditional"
Fallback="ScreenWithMenuElements"
#
TimerSeconds=30
#
RepeatRate=15
RepeatDelay=1/4
#
NextScreen="ScreenProfileSaveSummary"
#
HelpText="Enter your name!"
#
CancelTransitionsOut=true
MaxRankingNameLength=4
CodeNames="Backspace,Left,Right,NextRow1=NextRow,NextRow2=NextRow,PrevRow,JumpToEnter,Enter"
CodeLeft="+MenuLeft"
CodeRight="+MenuRight"
CodePrevRow="+MenuUp"
CodeNextRow1="+MenuDown"
CodeNextRow2="Select,~Select"
CodeBackspace="@Select-MenuLeft"
CodeJumpToEnter="@Select-Start"
CodeEnter="Start"
[ScreenProfileSave]
Class="ScreenProfileSave"
Fallback="ScreenWithMenuElementsBlank"
@@ -3414,8 +3396,8 @@ TimerSeconds=-1
[ScreenProfileSaveSummary]
Fallback="ScreenProfileSave"
#
NextScreen="ScreenGameOver"
PrevScreen="ScreenGameOver"
NextScreen=Branch.AfterSaveSummary()
PrevScreen=Branch.AfterSaveSummary()
[ScreenGameOver]
Class="ScreenEnding"
@@ -3638,19 +3620,22 @@ PlayRecordHelpOnCommand=halign,0;valign,0;shadowlength,1
LoopOnChartEnd=true
CurrentBeatFormat="%s:\n %.5f\n"
CurrentSecondFormat="%s:\n %.5f\n"
SnapToFormat="%s:\n %s\n"
SelectionBeatBeginFormat="%s:\n %.5f"
CurrentBeatFormat="%s:\n %.6f\n"
CurrentSecondFormat="%s:\n %.6f\n"
SnapToFormat="%s: %s\n"
SelectionBeatBeginFormat="%s:\n %.6f"
SelectionBeatUnfinishedFormat=" ...\n"
SelectionBeatEndFormat="-%.5f\n"
SelectionBeatEndFormat="-%.6f\n"
DifficultyFormat="%s:\n %s\n"
RoutinePlayerFormat="%s:\n %d\n"
RoutinePlayerFormat="%s: %d\n"
DescriptionFormat="%s:\n %s\n"
StepAuthorFormat="%s:\n %s\n"
ChartNameFormat="%s:\n %s\n"
ChartStyleFormat="%s:\n %s\n"
MainTitleFormat="%s:\n %s\n"
SubtitleFormat="%s:\n %s\n"
TapNoteTypeFormat="%s: %s\n"
SegmentTypeFormat="%s: %s\n"
NumStepsFormat="%s: %d\n"
NumJumpsFormat="%s: %d\n"
NumHoldsFormat="%s: %d\n"
@@ -3659,10 +3644,18 @@ NumHandsFormat="%s: %d\n"
NumRollsFormat="%s: %d\n"
NumLiftsFormat="%s: %d\n"
NumFakesFormat="%s: %d\n"
NumStepsFormatTwoPlayer="%s: %d/%d\n"
NumJumpsFormatTwoPlayer="%s: %d/%d\n"
NumHoldsFormatTwoPlayer="%s: %d/%d\n"
NumMinesFormatTwoPlayer="%s: %d/%d\n"
NumHandsFormatTwoPlayer="%s: %d/%d\n"
NumRollsFormatTwoPlayer="%s: %d/%d\n"
NumLiftsFormatTwoPlayer="%s: %d/%d\n"
NumFakesFormatTwoPlayer="%s: %d/%d\n"
TimingModeFormat="%s:\n %s\n"
Beat0OffsetFormat="%s:\n %.5f secs\n"
PreviewStartFormat="%s:\n %.5f secs\n"
PreviewLengthFormat="%s:\n %.5f secs\n"
Beat0OffsetFormat="%s:\n %.6f secs\n"
PreviewStartFormat="%s:\n %.6f secs\n"
PreviewLengthFormat="%s:\n %.6f secs\n"
[ScreenPracticeMenu]
Fallback="ScreenEditMenu"
@@ -3753,9 +3746,15 @@ TitleX=SCREEN_CENTER_X-80
[ScreenMiniMenuAreaMenu]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuAlterMenu]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuStepsInformation]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuStepsData]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuSongInformation]
Fallback="ScreenMiniMenu"
@@ -3949,6 +3948,7 @@ PrevScreen="ScreenNetRoom"
NextScreen="ScreenStageInformation"
NoSongsScreen=Branch.TitleMenu()
RoomSelectScreen="ScreenNetRoom"
PlayerOptionsScreen="ScreenPlayerOptions"
Codes="CodeDetectorOnline"
ShowStyleIcon=false
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,512 +0,0 @@
local t = Def.ActorFrame{}
local newBPS;
local oldBPS;
-- DECORATIONS ////////////////////////
-- Left Hex Corner Decoration
t[#t+1] = LoadActor("decoration_corner") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1));
OnCommand=cmd(horizalign,left;x,SCREEN_LEFT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;zoomx,0.6;diffusealpha,0.3;blend,Blend.Add);
};
-- Right Hex Corner Decoration
t[#t+1] = LoadActor("decoration_corner") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2));
OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;;zoomx,-0.6;diffusealpha,0.3;blend,Blend.Add);
};
-- WAVY LINE (thanks AJ) ////////////////////////
--P1
t[#t+1] = LoadActor("hot_lores") .. {
OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;texcoordvelocity,0.1,0;queuecommand,"Begin");
BeginCommand=function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
local move = GAMESTATE:GetSongBPS()/2
if GAMESTATE:GetSongFreeze() then
move = 0;
end
self:texcoordvelocity(move,0);
self:sleep(0.001);
self:queuecommand("Begin");
end;
end;
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_1 then
local lifeP1=params.LifeMeter:GetLife();
if lifeP1>=THEME:GetMetric("LifeMeterBar", "HotValue") then
self:diffusealpha(0.5);
else
self:diffusealpha(0);
end;
end;
end;
};
--P2
t[#t+1] = LoadActor("hot_lores") .. {
OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,left;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,(SCREEN_WIDTH/2-26)*-1;texcoordvelocity,0.1,0;queuecommand,"Begin");
BeginCommand=function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
local move = GAMESTATE:GetSongBPS()/2
if GAMESTATE:GetSongFreeze() then
move = 0;
end
self:texcoordvelocity(move,0);
self:sleep(0.001);
self:queuecommand("Begin");
end;
end;
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_2 then
local lifeP2=params.LifeMeter:GetLife();
if lifeP2>=THEME:GetMetric("LifeMeterBar", "HotValue") then
self:diffusealpha(0.5);
else
self:diffusealpha(0);
end;
end;
end;
};
--Double
--customtexturerect,0,0,[PixelsToCoverWidth]/[ImageWidth],[PixelsToCoverHeight]/[ImageHeight]
--I said that I was gonna write it down. thx midi
t[#t+1] = LoadActor("hot_lores") .. {
OnCommand=cmd(diffusealpha,0;horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;texcoordvelocity,0.1,0;customtexturerect,0,0,600/(SCREEN_WIDTH-36),1;queuecommand,"Begin");
BeginCommand=function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
local move = GAMESTATE:GetSongBPS()/2
if GAMESTATE:GetSongFreeze() then
move = 0;
end
self:texcoordvelocity(move,0);
self:sleep(0.001);
self:queuecommand("Begin");
else
self:visible(false);
end;
end;
LifeChangedMessageCommand=function(self,params)
local life=params.LifeMeter:GetLife();
if life>=THEME:GetMetric("LifeMeterBar", "HotValue") then
self:diffusealpha(0.5);
else
self:diffusealpha(0);
end;
end;
};
-- DANGER ////////////////////////
--DANGER P1 single
t[#t+1] = LoadActor("danger") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_1 then
local lifeP1 = params.LifeMeter:GetLife();
if lifeP1 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
self:visible(true);
end;
else
self:visible(false);
end;
end;
end;
};
--DANGER P2 single
t[#t+1] = LoadActor("danger") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_2 then
local lifeP2 = params.LifeMeter:GetLife();
if lifeP2 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
self:visible(true);
end;
else
self:visible(false);
end;
end;
end;
};
--DANGER double
t[#t+1] = LoadActor("danger") .. {
InitCommand=cmd(visible,false;horizalign,center;x,SCREEN_CENTER_X;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;zoomy,0.5);
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
LifeChangedMessageCommand=function(self,params)
local life = params.LifeMeter:GetLife();
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
if life <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- METERS ////////////////////////
---basemeter masked P1
t[#t+1] = LoadActor("basemeter") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add);
OnCommand=cmd(bounce;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,2,0,0,0;);
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_1 then
local style = GAMESTATE:GetCurrentStyle();
local lifeP1 = params.LifeMeter:GetLife();
if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
if lifeP1==0 then
self:visible(false);
else
if lifeP1==1 then
self:effectmagnitude(0,0,0);
else
self:effectmagnitude(-40,0,0);
end;
self:visible(true);
end
end
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:zoomtowidth((SCREEN_WIDTH-40)*lifeP1+5);
else
self:zoomtowidth((SCREEN_WIDTH/2-26)*lifeP1);
end;
end;
end;
};
---basemeter masked P2
t[#t+1] = LoadActor("basemeter") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add;queuecommand,"Set");
OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
SetCommand=function(self,params)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:effectmagnitude(-40,0,0);
self:horizalign(left);
self:x(SCREEN_LEFT+18);
end;
end;
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_2 then
local style = GAMESTATE:GetCurrentStyle();
local lifeP2 = params.LifeMeter:GetLife();
if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
if lifeP2==0 then
self:visible(false);
else
if lifeP2==1 then
self:effectmagnitude(0,0,0);
else
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:effectmagnitude(-40,0,0);
else
self:effectmagnitude(40,0,0);
end
end;
self:visible(true);
end
end
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:zoomtowidth((SCREEN_WIDTH-40)*lifeP2);
else
self:zoomtowidth(((SCREEN_WIDTH/2-26)*lifeP2)+40);
end;
end;
end;
};
-- FRAMES & TIPS ////////////////////////
-- Left Corner
t[#t+1] = LoadActor("mask") .. {
OnCommand=cmd(horizalign,right;x,SCREEN_LEFT+130;vertalign,top;y,SCREEN_TOP+12;zoom,0.45;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(true);
else
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Right Corner
t[#t+1] = LoadActor("mask") .. {
OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-130;vertalign,top;y,SCREEN_TOP+12;zoomx,-0.45;zoomy,0.45;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(true);
else
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Left Corner
t[#t+1] = LoadActor("corner") .. {
OnCommand=cmd(horizalign,left;x,SCREEN_LEFT+15;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(true);
else
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Right Corner
t[#t+1] = LoadActor("corner") .. {
OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT-15;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(true);
else
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Center Corner Left
t[#t+1] = LoadActor("center") .. {
OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X+5;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Center Corner Right
t[#t+1] = LoadActor("center") .. {
OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X-5;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false);
else
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
self:visible(true);
else
self:visible(false);
end;
end;
end;
};
-- Center part 1
t[#t+1] = LoadActor("frame") .. {
OnCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:zoomtowidth(SCREEN_WIDTH-105);
self:visible(true)
else
if GAMESTATE:IsHumanPlayer(PLAYER_1) == false then
self:visible(false)
else
self:visible(true)
end
end;
end;
};
-- Center part 2
t[#t+1] = LoadActor("frame") .. {
OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
SetCommand = function(self)
local style = GAMESTATE:GetCurrentStyle();
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:visible(false)
else
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
self:visible(true)
else
self:visible(false)
end;
end;
end;
};
---tip P1
t[#t+1] = LoadActor("tip") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;queuecommand,"Set");
--OnCommand=cmd(bob;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_1 then
local style = GAMESTATE:GetCurrentStyle();
local lifeP1 = params.LifeMeter:GetLife();
if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
if lifeP1==0 then
self:visible(false);
else
self:visible(true);
end
end
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:x((SCREEN_WIDTH-40)*lifeP1+20);
else
self:x((SCREEN_WIDTH/2-26)*lifeP1+20);
end;
end;
end;
};
---tip P2
t[#t+1] = LoadActor("tip") .. {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;);
--OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
LifeChangedMessageCommand=function(self,params)
if params.Player == PLAYER_2 then
local style = GAMESTATE:GetCurrentStyle();
local lifeP2 = params.LifeMeter:GetLife();
local fullstate;
if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
if lifeP2==0 then
self:visible(false);
else
self:visible(true);
end
end
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
self:x((SCREEN_WIDTH-40)*lifeP2+20);
else
self:x(SCREEN_RIGHT-((SCREEN_WIDTH/2-26)*lifeP2)-20);
end;
end;
end;
};
-- NAMES ////////////////////////
--P1 NAME
t[#t+1] = LoadFont("Common Normal") .. {
InitCommand=cmd(horizalign,left;x,SCREEN_LEFT+30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
BeginCommand=function(self)
local profile = PROFILEMAN:GetProfile(PLAYER_1);
local name = profile:GetDisplayName();
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
if name=="" then
self:settext("Player 1");
else
self:settext( name );
end
end
end;
};
--P2 NAME
t[#t+1] = LoadFont("Common Normal") .. {
InitCommand=cmd(horizalign,right;x,SCREEN_RIGHT-30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
BeginCommand=function(self)
local profile = PROFILEMAN:GetProfile(PLAYER_2);
local name = profile:GetDisplayName();
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
if name=="" then
self:settext("Player 2");
else
self:settext( name );
end
end
end;
};
return t
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

@@ -1,250 +0,0 @@
local c;
local player = Var "Player";
local bShowProtiming = GetUserPrefB("UserPrefProtiming" .. ToEnumShortString(player) );
local function MakeAverage( t )
local sum = 0;
for i=1,#t do
sum = sum + t[i];
end
return sum / #t
end
-- New
local function PosCount( t )
local Count = 0;
for i=1,#t do
if t[i] > 0 then Count = Count + 1 end
end
return Count
end
local function NegCount( t )
local Count = 0;
for i=1,#t do
if t[i] < 0 then Count = Count + 1 end
end
return Count
end
local function StdDev( t )
local avg = MakeAverage( t );
local sum = 0;
for i=1,#t do
sum = sum + math.pow(t[i] - avg, 2);
end
return math.sqrt(sum / (#t - 1))
end
--
local tTotalJudgments = {};
-- Global?
--[[ tPlayerData = {};
for pn in ivalues(GAMESTATE:GetHumanPlayers())
tPlayerData[pn].SignedJudgments = {};
tPlayerData[pn].AverageDifference = 0;
tPlayerData[pn].AbsoluteDifference = 0;
tPlayerData[pn].StandardDeviation = 0;
tPlayerData[pn].StandardDeviation = 0;
tPlayerData[pn].Early = 0;
tPlayerData[pn].Late = 0;
end ]]
--
local JudgeCmds = {
TapNoteScore_W1 = THEME:GetMetric( "Judgment", "JudgmentW1Command" );
TapNoteScore_W2 = THEME:GetMetric( "Judgment", "JudgmentW2Command" );
TapNoteScore_W3 = THEME:GetMetric( "Judgment", "JudgmentW3Command" );
TapNoteScore_W4 = THEME:GetMetric( "Judgment", "JudgmentW4Command" );
TapNoteScore_W5 = THEME:GetMetric( "Judgment", "JudgmentW5Command" );
TapNoteScore_Miss = THEME:GetMetric( "Judgment", "JudgmentMissCommand" );
};
local ProtimingCmds = {
TapNoteScore_W1 = THEME:GetMetric( "Protiming", "ProtimingW1Command" );
TapNoteScore_W2 = THEME:GetMetric( "Protiming", "ProtimingW2Command" );
TapNoteScore_W3 = THEME:GetMetric( "Protiming", "ProtimingW3Command" );
TapNoteScore_W4 = THEME:GetMetric( "Protiming", "ProtimingW4Command" );
TapNoteScore_W5 = THEME:GetMetric( "Protiming", "ProtimingW5Command" );
TapNoteScore_Miss = THEME:GetMetric( "Protiming", "ProtimingMissCommand" );
};
local AverageCmds = {
Pulse = THEME:GetMetric( "Protiming", "AveragePulseCommand" );
};
local TNSFrames = {
TapNoteScore_W1 = 0;
TapNoteScore_W2 = 1;
TapNoteScore_W3 = 2;
TapNoteScore_W4 = 3;
TapNoteScore_W5 = 4;
TapNoteScore_Miss = 5;
};
local t = Def.ActorFrame {};
t[#t+1] = Def.ActorFrame {
LoadActor(THEME:GetPathG("Judgment","Normal")) .. {
Name="Judgment";
InitCommand=cmd(pause;visible,false);
OnCommand=THEME:GetMetric("Judgment","JudgmentOnCommand");
ResetCommand=cmd(finishtweening;stopeffect;visible,false);
};
LoadFont("Combo Numbers") .. {
Name="ProtimingDisplay";
Text="";
InitCommand=cmd(visible,false);
OnCommand=THEME:GetMetric("Protiming","ProtimingOnCommand");
ResetCommand=cmd(finishtweening;stopeffect;visible,false);
};
LoadFont("Common Normal") .. {
Name="ProtimingAverage";
Text="";
InitCommand=cmd(visible,false);
OnCommand=THEME:GetMetric("Protiming","AverageOnCommand");
ResetCommand=cmd(finishtweening;stopeffect;visible,false);
};
Def.Quad {
Name="ProtimingGraphBG";
InitCommand=cmd(visible,false;y,32;zoomto,192,16);
ResetCommand=cmd(finishtweening;diffusealpha,0.8;visible,false);
OnCommand=cmd(diffuse,Color("Black");diffusetopedge,color("0.1,0.1,0.1,1");diffusealpha,0.8;shadowlength,2;);
};
Def.Quad {
Name="ProtimingGraphWindowW3";
InitCommand=cmd(visible,false;y,32;zoomto,192-4,16-4);
ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W3"];);
};
Def.Quad {
Name="ProtimingGraphWindowW2";
InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW2"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,192-4),16-4);
ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W2"];);
};
Def.Quad {
Name="ProtimingGraphWindowW1";
InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW1"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,192-4),16-4);
ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W1"];);
};
Def.Quad {
Name="ProtimingGraphUnderlay";
InitCommand=cmd(visible,false;y,32;zoomto,192-4,16-4);
ResetCommand=cmd(finishtweening;diffusealpha,0.25;visible,false);
OnCommand=cmd(diffuse,Color("Black");diffusealpha,0.25);
};
Def.Quad {
Name="ProtimingGraphFill";
InitCommand=cmd(visible,false;y,32;zoomto,0,16-4;horizalign,left;);
ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
OnCommand=cmd(diffuse,Color("Red"););
};
Def.Quad {
Name="ProtimingGraphAverage";
InitCommand=cmd(visible,false;y,32;zoomto,2,7;);
ResetCommand=cmd(finishtweening;diffusealpha,0.85;visible,false);
OnCommand=cmd(diffuse,Color("Orange");diffusealpha,0.85);
};
Def.Quad {
Name="ProtimingGraphCenter";
InitCommand=cmd(visible,false;y,32;zoomto,2,16-4;);
ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
OnCommand=cmd(diffuse,Color("White");diffusealpha,1);
};
InitCommand = function(self)
c = self:GetChildren();
end;
JudgmentMessageCommand=function(self, param)
if param.Player ~= player then return end;
if param.HoldNoteScore then return end;
local iNumStates = c.Judgment:GetNumStates();
local iFrame = TNSFrames[param.TapNoteScore];
if not iFrame then return end
if iNumStates == 12 then
iFrame = iFrame * 2;
if not param.Early then
iFrame = iFrame + 1;
end
end
local fTapNoteOffset = param.TapNoteOffset;
if param.HoldNoteScore then
fTapNoteOffset = 1;
else
fTapNoteOffset = param.TapNoteOffset;
end
if param.TapNoteScore == 'TapNoteScore_Miss' then
fTapNoteOffset = 1;
bUseNegative = true;
else
-- fTapNoteOffset = fTapNoteOffset;
bUseNegative = false;
end;
if fTapNoteOffset ~= 1 then
-- we're safe, you can push the values
tTotalJudgments[#tTotalJudgments+1] = bUseNegative and fTapNoteOffset or math.abs( fTapNoteOffset );
-- New
-- tPlayerData[player].SignedJudgments[#(tPlayerData[player].SignedJudgments)+1] = fTapNoteOffset;
-- table.getn(tPlayerData[player].SignedJudgments = bUseNegative and fTapNoteOffset or fTapNoteOffset;
end
self:playcommand("Reset");
c.Judgment:visible( not bShowProtiming );
c.Judgment:setstate( iFrame );
JudgeCmds[param.TapNoteScore](c.Judgment);
c.ProtimingDisplay:visible( bShowProtiming );
c.ProtimingDisplay:settextf("%i",math.abs(fTapNoteOffset * 1000));
ProtimingCmds[param.TapNoteScore](c.ProtimingDisplay);
c.ProtimingAverage:visible( bShowProtiming );
c.ProtimingAverage:settextf("%.2f%%",clamp(100 - MakeAverage( tTotalJudgments ) * 1000 ,0,100));
AverageCmds['Pulse'](c.ProtimingAverage);
c.ProtimingGraphBG:visible( bShowProtiming );
c.ProtimingGraphUnderlay:visible( bShowProtiming );
c.ProtimingGraphWindowW3:visible( bShowProtiming );
c.ProtimingGraphWindowW2:visible( bShowProtiming );
c.ProtimingGraphWindowW1:visible( bShowProtiming );
c.ProtimingGraphFill:visible( bShowProtiming );
c.ProtimingGraphFill:finishtweening();
c.ProtimingGraphFill:decelerate(1/60);
-- c.ProtimingGraphFill:zoomtowidth( clamp(fTapNoteOffset * 188,-188/2,188/2) );
c.ProtimingGraphFill:zoomtowidth( clamp(
scale(
fTapNoteOffset,
0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),
0,188/2),
-188/2,188/2)
);
c.ProtimingGraphAverage:visible( bShowProtiming );
c.ProtimingGraphAverage:zoomtowidth( clamp(
scale(
MakeAverage( tTotalJudgments ),
0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),
0,188),
0,188)
);
-- c.ProtimingGraphAverage:zoomtowidth( clamp(MakeAverage( tTotalJudgments ) * 1880,0,188) );
c.ProtimingGraphCenter:visible( bShowProtiming );
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphBG);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphUnderlay);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW3);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW2);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW1);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphFill);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphAverage);
(cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphCenter);
end;
};
return t;
+5 -2
View File
@@ -1,5 +1,8 @@
[Global]
FallbackTheme=default
[ScreenTitleMenu]
ChoiceNames="1,4,5,6,PopScreen,7"
ChoicePopScreen="name,Boobs;text,Boobs";
[ScreenGameplay]
LifeP1OnCommand=visible,false
LifeP2OnCommand=visible,false
# LifeP1OnCommand=visible,false
# LifeP2OnCommand=visible,false

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