+bJ;e(t(bH~jE!D>DRGF?B6uP2E81`&H%oew@h-MPh5g!=s%f@I<&SJ61bRtK`0g
z`;Z+yqIS;DSE2bK)r({i2`+8Xm5s#?SGLoGQ~G*WGPIvX
zG|~sR6aa(kSTDG4W@9a6eJw9!Jw$F?Use|bJ3H&NBC6`vHZc=#H;6{V83oQG1Fl)g
z*YkFX#SGMeHoj3G6AjWj`I=W)*J#Pt+s?}y&N@vUHr)8eP3?K8av0L^LS%t)X`bs2
zzJqN-i2C;|Plc7dgmvBmR&ym%V6qd$KIS5Z@AOLOn~9|;-AxJ1^ppul!qc+xJH-an_`ZvSHKUn;GVQDG2pb4qWq69Uz;pOUFHEZ>NHT5Bo
zo0NBa%?Vn|I!79rRY-5~YJ6THiOJWDsB`_p`Gi7|x>au&v&5F+6fE!I+Rbfl9j-5;
zx&pzHXABdRYJ8e3w^oz1_KD=v(c0p=g?t?vrthDEH=VsmTN5etP01QJ^-=%^;TIz<
zTo5Q+zordzVQkmdq-pgw$SYJypCcvD`HlQ*gAk4x!1L8x0VB7!-LAt|U*sGxH|HBf
z#?R{eNA4G>hgT*~D8#26DGeA3Ida7%)M^Fn*)MaE%p0XA9;+uvW-Dy&!AxHbgyQxJ
z7qrM+tmi{bQ6JYg@@J8n&UylIM@ichc9#^|q}ws*bSqEH$Ug9c
zLE?G@Siuxn_Nv;ctH9FYTGuK6IsDaqGvpw#ssaT29B#O(%CC}zdfSOyc*%EKp;b%o
zv#F<-5FRU{Y6a}MQ%r5Sj_Fa}!O?x-w9q3TjtFizOlC)d>pB@%aWV#Zwy6ymgT2)V
zOi{L1&SyO#-ty%I^L=37Xss_-af0psXVd-4C~GE$O1U|fDX_N15$RNsnAP1n;L>B9
z#RfcoC(#IlnCEJav(heJY>I`T^foY9WJZWdOIWVEFwO*6RCN0rVwzM|U6jFILJ4c4
zLHpY1?Y%R`&!oaB)4Rdpc3EZwiGxBDLii3h#g1N!wp>1_5&>SvJ_w^igTTYlIBg*jrO~sn&ik#j#y~3
z{O7BUf~*5_A^GN9bDB4&vd08jmtw+dl6eNXP0kYI>vc(7&4HEt^Oh|M7!ld!g)4WF
z^r&@U>PA^d2SDGe@Tzb%;}w@vCyDaPVBoc^=}09L)6y*~DPu0J7hFKx1Ey2b
z*c!fLGpIV#26^z`^gVW%bP4JAlkOXR=H6}R>L^m)FV_H$OP6|z0l@elodEoUeLQ8m
zPFN_oVE%18`Hrgj{CfRLM>|942MFullN6*~+a81aZ`VE-_V3@`pmgY=U#|7aAH@9H
zLX~9q%KMw2wv+R`Q-Av}oo?UWX&DOv@ykCe^Ac+OB|f1d>)*ot
zmi8=(_=_T#&&mz`
z@gfqFKTrRbg>99MKhetL`w_(tvA6XHp>TWp#-G%m+P(c{=!I&D|L0mpcez)6D$f$8
z?F1Rep5rX0CA=PJsHC$h!{P6|Q?lDWK7l(TX60K|`DvYNYuXmDidx(}3s+t{l?PyL
z+n~8g${Jrn%1o?&p>@gW^OlT;%6V2L-OnH9l~Wun$$satrzS!EUt&V*Zu`Vykk+#d
z=W>J_*xA9)O5~{x$kA#xAspD>1GA{!98qoBfSUudSOk=|mo+9nm>2R4h3X8_E+iFR
zI$9J4Cr8GSBP-Auz;2lu0bY39zezR#%K_vqSFDw9-9DjaT2}iSh#oh;?(F|8yX{?#
zyW^SJgr(gcQY91AQQmA8D2^Nshba_Gl)#RGt5XLPYN3-;uSrW0(r!svS*4RN)gkMZ
zwaO$c$P)D8&@%odAF7@|t9LC!PU$WZ=ReZJTg``DYS|RGG<>HZSL~}(keWPkz_hGF
zxrtEO3#bKQ7M@X8mtkwcBqfqPCEVQHG7Gt|KvD*rVc}~UA4rJ{_5GWi0uD+di5h~@
zH83Dykxu^b?oXm1`Ym>#5}3wZi_$IrKE&%70ftTaN-`iG3N@To(Q_R=yg)CLi3ez|
zmNV;9?MPdHlb2A!RWDAtC1ELI-!hAAW;nJIDlbd(5(g!yF3;mbZ~;(&{Z==;4eRL*
z1J2#i4NMy`nc5*v=9=rcI=cfIM0YM%DpF7F{mW3|;%-&~2P)BC#dE`@?$h^*@S=>2
z9xXrUmblt#;wqM(#g69;@dA58kr)=_cwv?kC%#Z5B78n%W^Q+LEjq7P-D<~;weCy!
zAxO4e3d&a!4{*1)zVHWN6;B@)OY*~yZj9{%Clfsr21_zBL*Ky1!YeX#TGj79@V_R^
z(ohC#x5nBH21zRuEgLiPTwEf+outIfEts`U$;ea~kJZNS6%H5~=6j)}u*J9xEYepp
zt)$lz2Yb=a+VvsJc?%hr098t7s7fs-$5~_0L!>4`u?S(JeH4$uHwmCJG8Kt5FqK5I
zgBAI&z>%SEo-daJ^s6Tus}r|Zcn%oD{-sPS&jqGwNFrk-op9^+^Tjy
zB5}I_jXYEV$mwyG5L)I_?aK1@jDhvyEcS~C1
zgzOg%SjlbPqI?SjNJu;a>e@{UHR*F6iaP-?RW%&sg`ZXc#&_>btS+#BchaAXH1btL
z7ievxE0Zi===)xyVC;w>D~oOUEYH~=PG9fZ2)ZYJ<2-|$$6@g`6T|CWfl+Glj?szn
zP~nwd9%~m3!nsCRkR
za~7C9h1U33qx#yR9GWo@4i>U8fDFow1iK0U5ra!p@YpLniXR5LWaSCKUBIs0F&97a
zu1+Brn7Xo!-@(`cXAA9SqLCM=EDH(yTq|;pwi_ImU?BdtIIu9W4tF%}cpsQN(nblA
z!142vcpwelIv=DDl@D@L>?_5aOFFZF5N79S|6%xPIU4X~FG|C=Zjup2g
zFd|M$0a*l8M5RAm5i`h*(xZ=YALDAa%W!r^FcD8`{h%B0nicYt%L{PejvGKwGZL^S
zX#qz`aJ-;B!-=*lh@<9_SKPZ8l}F;PJ7FMod`vvgR;JT1t`!l8)!=;XY0l^+|WV+cvbVE-Av?yuC$}Y
zntmkMi?mY9m%R@xV%J?npT;)hux7~U7~Dzi5|o%)em8AmF~c^)b}kSVS=85$mwhqB
zl%{b2q6*U~Ol=1!3xH3>I3vedYPrHVpxW1`avtBm=pDZu;Yd46p0lL1YnL;_YcVgi=UJ3xjt44J>~#yiQ1P&o}d$r
zfIW#B_a=I;a6BjS#`EO`9vo!4g!uU?Rv;NzDvt~ClEk6!EeY)Ag)_6B;e{ZWY0f?{
z^A_?*C&jZf?v3`;N`%w%L1JM8)a0z)F(IBNLEaU(e??}Ft>oAnzGi@ismkLgfK7%P
z1T2`&Sp2?k%hbn#HGIM`tJnxIneHvI%*x8M^ba59e!V`;O~w1~d>(Kp3BRZ)YieN!
zbYdz@zxBB6a6@HaMb}|S@uEr~6o?b?&A^7ox;IQGKdt?eiC--m(5)7a0(Y?#GlA}}
zyaep7I%<%X)Ux)}`n2l;K+_2qRnE;)rIkQy@$L)Z^=`^UpjKyKKOS)x-b~v{+6oT3
z5hMSY-f(rl@Fo`)#9Ut3bU=Emd*lG>G)zm%&bp#obB78kxjT!yY`OYW6<0Hvj*y5~
zlO1l6!2$kP)StjqSkO}jxP03C87;SATFIL0&CtI{_^e
zJlbX)%cMld{6NU@C)+(`nUps!+ipoT{-iqq9ZS9&Zu6N(t8_5i@F_~xd0PO+r8?WL
zpLfbXlpp&e_8&wKn9KMZ
zzx4P2s^!PoK*FBubwAR%RsEx1>adsI7FYWJZ^)0Ve|q!_=iXC(;;&FEY+D0QuFNF<
z5CB^cuCcwVdutFJ>~MIQ#54@%p;DR01iXV$+|qR;cnZWE8!bj7#uiqr(+wu;SpnLjV(6
zSHR3uP=oH)g`{?|kNpk)BX)IbPv%)YAr=z=#8iPCEobqw-|RYIrY#65gZ$L}X~}uE
z?i4$+UU+Uv<-En2^Z)>oo*GEKIIvu0YjURanV1NXu}%$I3+C9`4x#5t$2LARAjoyD
z#o2AXA#a6bRF*mT(k>V&e{&)z8k5Hnu~Q7EG?Y|wo-E}KSakP_O{hDA#?P0t1JA(v
zGvom9&SEYyXN1$&Z6o0;#&w^<*~J4HJ?d7Pg&+WVIbRPG5DjrU()uzh+C{hs8#u?9
zJl{~Ms3F%DEU5wU1T1-$$UQq?zo4GjsK;;Ab6i75`~DTz5@p~5zGEZM>xv~=(-m>Ws2@aG5
zmsW*G8i)^Ps%On*FswhlZA#6sbOX(4Ccjhp!L_S~A!gIMgkV@JwL{jK7;90h*7>j^+
zDe&_WRlM-`;lU|+nY+R5^fhlS)0QR?)iJSwknUdf1TII&IR<$Oz=^XeRhl;+Hqh5g
z2IkjsDodlhK~}*bfUg@cT#Sv_)8$}KO8_l<0N-VTxdxm&
zycdD{GBM+D@={Tem?Zdx;&RF-ikaavRDCKrt({szw0swBN3o+v!twNmOo1)BU6FtM
zOudj-%N;mudbC{Vo*+0JK7tNso_K=2p?M_1UpH?*U(*%`UE9qZw|2f9+kQy_}as)qWwOO|NAarizg~
z$G~_1)UCd}S+pS(33eY9JSjk=h7@>38%4?hA
zFdCNo5D^u0|4vvN3~=HHtHQ&(mI^bHfFa$E|S~x_6r7;glqAU@YzD-bzx&hNP
zp1h7A*G^Gow}Q#HB!rj~f+gIPX{akjvwkamD_Fop%qWKC@lC7TX-as7`y?8apmimu
znASPdyLL}5ymoE~IC;pCyQ_BhsTrt@t+NlTAQvz}=WE7PA;=AYD@8gCG21fc6*qXJ
zSl1Q+hr5>=9c@%kFKmc^r7JaAtlAP^WNEmz&P}a1kOC4t*q2Fz6Vz`i0Q3!)m+gPO
zF%F~-nCT(UfKO-0dbMuA@dd|C5=>rPpHYpylXXADozly8T>ua*)LRQL9mBb-`%QFV
z{n`RB@M#IAeR*|&b=rsUa|kJrGfU(7XQ(Pzym~`Qg0p;WA@;}>JO3P>8*yByCWAMC
zYwqqQjMIc{X)D&X2Q!8>K1-H_AZ(m&V=M~DWVCoS0^S993XKPpmtTa4FI;tBn9%_a
zrSQw=LqF95LlQfHaOpg=Tn<2rTH8j>B_i*tdb8Ue+bIUxA>eV69VrPi%8h|f02)7p4xVf|?_I0B1Shy17DBrEPs
zT^gC4OvFvTE@eJ3+)74AB=~%$zF}Tv7Mo3dOs*rIsE`B%*2NLtw=h724G97B4`v${
zy`~*R4v(vVsY5nT&$2O5C^N(N6eQ*QdeFJA{*>Cy(r`+p3$Ud0CIS*_n7c8~C~9>^
zwM&SH(J)sUo;&a`kGK`vfWqTqF&IFcvFi>dis3GlN_t(zSYHnFCEo%~H0EL*aLQy9
zmB(`<)B+H86_kiL2R{qXox(8}hj{D9#3GvTvaUVHf&7kChA*)KpiyH5^WHn_hm$5Y
zzg;rviUy7{DGdm^g+*^;jZ~&9{GzoWG&RG;iMR
zUDefu$TbY1D;Sx%%^fKu?%R41Tl+#gbz*S=a5EAFUqs`KJoK;t!)jU@b~9fcpaC4K
zbQm(7+dQNr3AUbjQ^kPD0mDYD*HcT+Jym3DKhqZ9c+1sXrnj+aMqsSPvcq&HGa3Nm
zkEB%kW1eNmJl`^Y%_YIW?!KrKs}&D)J2DVDJkR$>j3ebRAqzN;5x*h-&(urbkyxv@
zfErZ>)Q(U>vuJf5U#f3{wq9YHNNM3dFtAcv%6kMrt-XZ&N4SUEC^Y60u&I{xWuf5(
zLWqh!lmvc8!w7ivqo(2Hzm64TlnqS#fa92Xi1Qh3xq#m9nw-anmKRnS5HB3;Z!L4(
zI#+ZB!UgXi=k9OqJI9@(_abnoW4vIV*HuiOLB372j6n8&K|kQcXhLO{3#Av!G9!db
z8AzvfV#a$$N5!QUY3{oZE-xqpCl5uUD_|<11sW?5o6x9UUJ1^PL99RTC`As~y(H|U
zl9+(YK2|8i7UH=9INR-fhLbs7o81Y~%xep|W`zBFfx#G+ao4b5;;M9DVJh(UfPDlV
zj@1MPuMpi89O4`=qzebOkTtd9%#PylkqB1I=E|o+VVP+0dlnrU4`H8G^Wqa~$-UPf
z9s}c<_|hR_r1|XcpT_{Ucc9(j>sxjsNxG%#RWqY8u;3cOYr_-=a91^NV=dmNwuk
vAD+H;wK_&M8a4Y8T9RohY0-Z6nHmN-2aqa&Bs5bFf
literal 0
HcmV?d00001
diff --git a/Themes/Til Death/Scripts/11 Wheel.lua b/Themes/Til Death/Scripts/11 Wheel.lua
new file mode 100644
index 0000000000..8c8eb2fbd2
--- /dev/null
+++ b/Themes/Til Death/Scripts/11 Wheel.lua
@@ -0,0 +1,252 @@
+local Wheel = {}
+
+Wheel.mt = {
+ move = function(whee, num)
+ rebuildFrames(whee, whee.index + num)
+ --TODO: Animations?
+ end,
+ rebuildFrames = function(whee, newIndex)
+ whee.items = whee.itemsGetter()
+ whee.index = newIndex or whee.startIndex
+ for k, v in pairs(whee.items) do
+ -- TODO: Handle circular buffering logic?
+ whee.itemUpdater(v, whee.items[k])
+ end
+ end
+}
+
+Wheel.defaultParams = {
+ itemsGetter = function()
+ -- Should return an array table of elements for the wheel
+ -- This is a function so it can be delayed, and rebuilt
+ -- with different items using this function
+ return SONGMAN:GetAllSongs()
+ end,
+ count = 20,
+ itemBuilder = function()
+ -- Should return an actor def
+ --TODO
+ end,
+ frameUpdater = function(frame, item) -- Update an frame created with frameBuilder with an item
+ --TODO
+ end,
+ x = 0,
+ y = 0,
+ highlightBuilder = function()
+ end,
+ buildOnInit = true, -- Build wheel in InitCommand (Will be empty until rebuilt otherwise)
+ frameTransformer = function(frame, offsetFromCenter, index, total) -- Handle frame positioning
+ --TODO
+ end,
+ startIndex = 1
+}
+function Wheel:new(params)
+ local whee = Def.ActorFrame {}
+ setmetatable(whee, Wheel.mt)
+ whee.itemsGetter = params.itemsGetter
+ whee.count = params.count
+ whee.startIndex = params.startIndex
+ whee.frameUpdater = params.frameUpdater
+ whee.buildOnInit = params.buildOnInit
+ whee.frameTransformer = params.frameTransformer
+ whee.index = whee.startIndex
+ whee.x = params.x
+ whee.y = params.y
+ whee.OnCommand = function()
+ whee:x(whee.x):y(whee.y)
+ if params.buildOnInit then
+ whee:rebuildFrames()
+ end
+ end
+ whee.frames = {}
+ for i = 1, (params.count) do
+ local frame =
+ params.frameBuilder() ..
+ {
+ InitCommand = function(self)
+ whee.frames[i] = self
+ local offset = math.floor(i - whee.count / 2 + 0.5)
+ whee.frameTransformer(self, offset, i, whee.count)
+ end
+ }
+ whee[#whee + 1] = frame
+ end
+ whee[#whee + 1] =
+ params.highlightBuilder() ..
+ {
+ InitCommand = function(self)
+ whee.highlight = self
+ end
+ }
+ return whee
+end
+
+local function LegacyParams()
+ local params = {}
+ local function SelectMusicWheelMetric(key)
+ return GetMetric("ScreenSelectMusic", "MusicWheel" .. key)
+ end
+ params.x = SelectMusicWheelMetric("X")
+ params.y = SelectMusicWheelMetric("Y")
+ local function MusicWheelMetric(key)
+ return GetMetric("MusicWheel", key)
+ end
+ params.frameTransformer = MusicWheelMetric("ItemTransformFunction")
+ params.count = MusicWheelMetric("NumWheelItems")
+ local function MusicWheelItemMetric(key)
+ return GetMetric("MusicWheelItem", key)
+ end
+ local songNameX = MusicWheelItemMetric("SongNameX")
+ local songNameY = MusicWheelItemMetric("SongNameY")
+ local function wheelItemPartXY(type)
+ return {
+ x = MusicWheelItemMetric(type .. "X"),
+ y = MusicWheelItemMetric(type .. "Y")
+ }
+ end
+ local function wheelItemPart(type)
+ local part = wheelItemPartXY(type)
+ part.on = MusicWheelItemMetric(type .. "OnCommand")
+ return part
+ end
+ local wheelItemParts = {
+ "SectionExpanded",
+ "SectionCollapsed",
+ "SectionCount",
+ "Sort",
+ "WheelNotifyIcon",
+ "Roulette",
+ "SongName",
+ "Portal",
+ "Random",
+ "Custom",
+ "Mode"
+ }
+ params.parts = {}
+ for i = 1, #wheelItemParts do
+ local part = wheelItemParts[i]
+ params.parts[part] = wheelItemPart(part)
+ end
+ local wheelItemTypes = {
+ "Course",
+ "Custom",
+ "Mode",
+ "Portal",
+ "Random",
+ "Roulette",
+ "SectionExpanded",
+ "SectionCollaped",
+ "Song",
+ "Sort"
+ }
+ local function loadGraphicFile(filename)
+ --TODO
+ return loadfile(THEME:GetPathG(filename, ""))
+ end
+ local function loadMusicWheelItemPartLegacyActor(name)
+ return loadGraphicFile("MusicWheelItem " .. type)
+ end
+ local function loadMusicWheelItemTypeLegacyActor(type)
+ local parts = {
+ "Normal",
+ "Color",
+ "Over"
+ }
+ local item = Def.ActorFrame {}
+ for i = 1, #parts do
+ local part = parts[i]
+ local actor = loadMusicWheelItemPartLegacyActor(type .. " " .. part .. "Part")
+ item[#item + 1] = actor
+ end
+ return item
+ end
+ local function constF(x)
+ return function()
+ return x
+ end
+ end
+ params.actorBuilders = {}
+ for i = 1, #wheelItemTypes do
+ local type = wheelItemTypes[i]
+ params.actorBuilders[type] = constF(loadMusicWheelItemTypeLegacyActor(type))
+ end
+ params.actorBuilders.grades = constF(loadMusicWheelItemPartLegacyActor("grades"))
+ params.actorBuilders.highlight = constF(loadGraphicFile("highlight"))
+end
+
+local function example()
+ -- Pseudo code for a possible way of doing groups
+ -- Using polymorphism of items so both strings and songs are in there
+ local function allPacks()
+ --TODO
+ end
+ local function songActor()
+ --TODO
+ end
+ local function groupActor()
+ --TODO
+ end
+ local function split(table, element)
+ --TODO
+ end
+ local function concat(t1, t2, t3, t4, tn)
+ --TODO
+ end
+ local function getAllSongsFromPack(packname)
+ --TODO
+ end
+ local w
+ w =
+ Wheel:new {
+ contentGetter = allPacks,
+ frameBuilder = function()
+ local x
+ x =
+ Def.ActorFrame {
+ groupActor {
+ InitCommand = function(self)
+ x.g = self
+ end
+ },
+ songActor {
+ InitCommand = function(self)
+ x.s = self
+ end
+ }
+ }
+ return x
+ end,
+ frameUpdater = function(frame, songOrPack)
+ if songOrPack.GetAllSteps then -- song
+ -- Update songActor and make group actor invis
+ local song = frame.s
+ local group = frame.g
+ group:visible(false)
+ song:visible(true)
+ else -- pack
+ --update group actor and make song actor invis
+ local song = frame.s
+ local group = frame.g
+ group:visible(true)
+ song:visible(false)
+ end
+ end,
+ onSelection = function(frame, songOrPack)
+ if songOrPack.GetAllSteps then -- song
+ -- TODO: Start song
+ else -- pack
+ local group = songOrPack
+ local groups = allPacks()
+ local g1, g2 = split(groups, group)
+ w.contentGetter = function()
+ return concat(g1, getAllSongsFromPack(group), g2)
+ end
+ w:rebuildFrames()
+ end
+ end
+ }
+end
+
+function Wheel:LegacyWheel()
+ return Wheel.new(LegacyParams)
+end
diff --git a/Themes/_fallback/Scripts/02 ActorDef.lua b/Themes/_fallback/Scripts/02 ActorDef.lua
index 79938a8b8d..a44f56ceed 100644
--- a/Themes/_fallback/Scripts/02 ActorDef.lua
+++ b/Themes/_fallback/Scripts/02 ActorDef.lua
@@ -87,6 +87,9 @@ setmetatable(
)
--- Resolve a path (Returns resolved path string)
+-- @string path
+-- @number level integer, call stack level for error()
+-- @boolean optional is this path required or optional
function ResolveRelativePath(path, level, optional)
if path:sub(1, 1) ~= "/" then
-- "Working directory":
@@ -101,6 +104,8 @@ function ResolveRelativePath(path, level, optional)
end
--- Load an actor template.
+-- @string path
+-- @number level integer, call stack level for error()
function LoadActorFunc(path, level)
level = level or 1
@@ -166,6 +171,7 @@ function LoadActorFunc(path, level)
end
--- Load and create an actor template.
+-- @string path
function LoadActor(path, ...)
local t = LoadActorFunc(path, 2)
assert(t)
@@ -174,6 +180,8 @@ end
--- Same as LoadActor but sets everything in params as
-- "Thread Variables" accessed via Var("name")
+-- @string path path to file without extension
+-- @table params doing Var(key) in the file in path will index this table
function LoadActorWithParams(path, params, ...)
local t = LoadActorFunc(path, 2)
assert(t)
@@ -218,7 +226,7 @@ function LoadColorFont(a, b)
}
end
---- Returns an ActorFrame with the numeric table t as children
+--- Returns an ActorFrame with the numeric table/array t as children
function WrapInActorFrame(t)
return Def.ActorFrame {children = t}
end
@@ -256,6 +264,7 @@ function ShowStandardDecoration(MetricsName)
return THEME:GetMetric(Var "LoadingScreen", "Show" .. MetricsName)
end
+-- @table NullActor
--blank actor because these come in handy from time to time
NullActor = {Class = "Actor", _Source = "(null actor)"}
diff --git a/Themes/_fallback/docs/markdown/Actor-Commands.md b/Themes/_fallback/docs/markdown/Actor-Commands.md
new file mode 100644
index 0000000000..77c01ef96b
--- /dev/null
+++ b/Themes/_fallback/docs/markdown/Actor-Commands.md
@@ -0,0 +1,187 @@
+#Actor Commands
+
+## Command
+
+A command is basically an `Actor` function defined by lua. These can be called instantly using playcommand(commandStringName) or queued for the next frame using queuecommand(commandStringName) on an actor. Usually, they identify certain events that happen, and are called accordingly. Parameters to Commands are '(self, params)' with params being an optional table of named parameters. Note that the command's name must be stripped of the suffix 'Command' when playing/queueing it.
+
+ Def.ActorFrame {
+ InitCommand = function(self)
+ self:x(5)
+ end
+ }
+
+## MessageCommand
+
+A 'message' command is registered as XMessageCommand (Instead of XCommand), and the registered command will still be called X, but it will be flagged as a message command. This means that if someone broadcasts a message (Using `MSGMAN` a.k.a message manager) it will trigger/execute that command (Meaning, that function). Parameters to MessageCommands are '(self, params)' with params being an optional table of named parameters.
+
+## Universal Commands
+
+These are Commands which are usable for all actors, regardless of screen.
+
+### InitCommand
+
+Executed before the screen displays it's 'on' state. Useful to initialize actor state (Like position, sizes, storing the reference to the actor in a file-local variable)
+
+### OnCommand
+
+Executed as the screen is displayed (After all InitCommands). Useful, for example, to begin animations as the player enters a screen.
+
+### OffCommand
+
+Executed as the screen is being exited.
+
+### AnimationFinishedCommand
+
+Executed when an animation is finished (If one was executed on this actor)
+
+### CodeMessageCommand
+
+Executed when any button specified in metrics is pressed. You must have CodeNames set in the respective screen in metrics.ini for this to function correctly.
+
+ params = {
+ PlayerNumber = PLAYER_1 or PLAYER_2 ,
+ Name = the name of the code you specified. So if you have `Codeleft="Left"` in metrics.ini and you press left, params.Name would be "left"
+ }
+
+Example metrics:
+
+ CodeNames="ResetJudge,PrevJudge,NextJudge,ToggleHands"
+ CodeResetJudge="MenuUp"
+ CodeNextJudge="EffectUp"
+ CodePrevJudge="EffectDown"
+ CodeToggleHands="MenuDown"
+
+# Screen Specific
+
+Note: In case something is missing in any particular screen, you can check the ScreenX.cpp files under /src/ in the github repository, checking what is broadcasted by MESSAGEMAN.
+
+## ScreenSelectMusic
+
+### SetMessageCommand
+
+Broadcast when a `MusicWheelItem`' is being set with new information, such as when scrolling up and down. Gets the `Song` currently selected in the `MusicWheel`
+
+ params = {
+ Song = An instance of the `Song` that was just set to the `MusicWheelItem`,
+ Index = The index of the `MusicWheelItem` that was just set,
+ HasFocus = If the `MusicWheelItem` is focused or not,
+ Text = The name of the song group this `MusicWheelItem` is from,
+ }
+
+### CurrentStepsP1ChangedMessageCommand
+
+Triggered when the currently selected `Steps` (a.k.a chart within a `Song`) change, whether it be by changing the difficulty or selecting another song.
+
+### CurrentSongChangedMessageCommand
+
+Triggered when the `MusicWheel` current `Song` changes.
+
+### PreviousSongMessageCommand or NextSongMessageCommand
+
+Triggered when the player selects a different `Song` in the `MusicWheel` by tapping left or right.
+
+### ChangeStepsMessageCommand
+
+Triggered when `Steps` are changed. Need to check player & direction using ChangeStepsMessageCommand=function(self, params) then params.Player and params.Direction.
+
+ params = {
+ Player =PLAYER_1 or PLAYER_2,
+ Direction = 1 or -1,
+ }
+
+## ScreenGameplay
+
+### LifeChangedMessageCommand
+
+Activated whenever a player's life changes.
+
+| Parameters | Description |
+| ---------- | --------------------------------------- |
+| Player | Either PLAYER_1 or PLAYER_2 |
+| LifeMeter | Amount of life in a decimal from 0 to 1 |
+
+If the lifebar is type is battery it will also have LivesLeft and LostLife.
+
+### HealthStateChangedMessageCommand
+
+Activated whenever a player's health state changes...
+
+| Parameters | Description |
+| -------------- | ------------------------------------------------------------------------------------------------------------------------ |
+| PlayerNumber | Either PLAYER_1 or PLAYER_2 |
+| HealthState | A HealthState Enum, which is either `HealthState_Hot`, `HealthState_Alive`, `HealthState_Danger`, or `HealthState_Dead`. |
+| OldHealthState | self explanatory. |
+
+### PlayerFailedMessageCommand
+
+This one's obvious.
+
+| Parameters | Description |
+| ------------ | --------------------------- |
+| PlayerNumber | Either PLAYER_1 or PLAYER_2 |
+
+### ScoreChangedMessageCommand
+
+Activated whenever a player's score changes. Params include PlayerNumber and MultiPlayer, but can also include ToastyCombo in certain cases.
+
+| Parameters | Description |
+| ------------ | --------------------------- |
+| PlayerNumber | Either PLAYER_1 or PLAYER_2 |
+| MultiPlayer | ??? |
+
+### JudgmentMessageCommand
+
+Triggered when a judgment happens, either because a player stepped on a note or they completely missed it.
+
+| Parameters | Description |
+| ------------- | -------------------------------- |
+| Player | Either PLAYER_1 or PLAYER_2 |
+| MultiPlayer | If they're multiplayer, probably |
+| TapNoteSccre | The TapNoteScore |
+| Early | True if early, false if late |
+| TapNoteOffset | Offset of the judgement |
+| HoldNoteScore | The HoldNoteScore |
+
+### ComboChangedMessageCommand
+
+Activated whenever a combo changes.
+
+| Parameters | Description |
+| ---------------- | ---------------------------------------------------------------- |
+| Player | Either PLAYER_1 or PLAYER_2 |
+| OldCombo | ??? |
+| OldMissCombo | ??? |
+| PlayerState | An instance of PlayerState. This may not always be present. |
+| PlayerStageStats | An instance of PlayerStageStats. This may not always be present. |
+
+### ToastyAchievedMessageCommand
+
+| Parameters | Description |
+| ------------ | --------------------------- |
+| PlayerNumber | Either PLAYER_1 or PLAYER_2 |
+| ToastyCombo | ??? |
+| Level | ??? |
+
+### ToastyDroppedMessageCommand
+
+| Parameters | Description |
+| ------------ | --------------------------- |
+| PlayerNumber | Either PLAYER_1 or PLAYER_2 |
+
+### DoneLoadingNextSongMessageCommand
+
+Unknown, might be triggered during course mode
+
+## ActorScroller specific
+
+### GainFocusCommand
+
+Triggered when the ActorScroller is selected
+
+### LoseFocusCommand
+
+Triggered when the ActorScroller is deselected
+
+## Downloads
+
+###
diff --git a/Themes/_fallback/docs/markdown/QuickStart.md b/Themes/_fallback/docs/markdown/QuickStart.md
new file mode 100644
index 0000000000..e1d9826578
--- /dev/null
+++ b/Themes/_fallback/docs/markdown/QuickStart.md
@@ -0,0 +1,15 @@
+# QuickStart
+
+A lua file is plain text. To create and edit these you need a plain text editor such as notepad.
+
+You can use any text editor, but to make your life easier, we recommend that you use vscode. Extensions you may want to use with vscode would definitely be the vscode-lua generic lua extension and the ettlua extension.
+
+If you have no programming language experience whatsoever or you are not familiar with lua and don't think you would be comfortable infering the syntax, it is recommended that you read some lua book or material (Like https://www.lua.org/pil/contents.html , chapter 1 being optional, chapters 2 to 5 recommended and 13,19 and 20 also optional. You're free to read the whole book, but you will probably not get a lot of useful things for lua in this game from the rest).
+
+## Basic Structure
+
+The game defines a number of `Screen`s. It's possible to define custom `Screens`, but that's not inmediately relevant. Each `Screen` is a container for `Actor`s. Pretty much every Drawable thing is an `Actor`. A container for `Actor`s is actually called an `ActorFrame` (So, `Screen`s are `ActorFrame`s). Lua comes into play in the game when loading `Screen`s. Some lua code is executed when initializing `Screen`s, and it tells the game which `Actor`s it needs to create and add to it. It can also registers a number of `Command`s, which are just lua functions executed on certain events (Usually called by the game engine). Lua code is also executed when the game is executed, on startup, usually to initialize whatever global state it needs to use later, and to define functions globally so they can be available everywhere (Note: Usually it's recommended to "namespace" your global functions, putting them under a table, so as to not pollute the global namespace). A lua file executed at startup is called a `Script` within the context of this game. Sometimes, Screen lua files are called `BGAnimations`, or "BackGround Animations" (Sometimes abbreviated BGAnims).
+
+## Screens
+
+I mentioned lua code can be executed on `Screen` initialization. However, `Screen`s have a second component to them that is of relatively big importance to someone dealing with BGAnims: metrics.ini
diff --git a/Utils/config.ld b/Utils/config.ld
index 53f963890c..72e41496c4 100644
--- a/Utils/config.ld
+++ b/Utils/config.ld
@@ -1,8 +1,13 @@
+project = "Etterna"
title = "Etterna lua docs"
description = "Spread 4k focused rhythm game"
-project = "Etterna"
-file = {"../Themes/_fallback/Scripts"}
+file = {"../Themes/_fallback/Scripts", "../Themes/_fallback/docs"}
+topics = '../Themes/_fallback/docs/markdown'
+use_markdown_titles = true
+format = 'discount'
+style = '!fixed'
all = true
pretty = true
--prettify_files = true
-not_luadoc = true
\ No newline at end of file
+not_luadoc = true
+alias('ret',{'return',modifiers={type="$1"}})
\ No newline at end of file
From 1e21ae049948b0c75da06d9b63946dfdd14fce06 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 15:16:25 -0500
Subject: [PATCH 007/320] fix theme errors due to typos
---
.../BGAnimations/ScreenSelectMusic decorations/score.lua | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
index ac5c82fb02..abcc07938b 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
@@ -352,7 +352,8 @@ local l =
local overall = score:GetSkillsetSSR("Overall")
self:settextf("%.2f", overall):diffuse(byMSD(overall))
end
- },
+ end
+ },
LoadFont("Common Normal") ..
{
Name = "Score",
@@ -380,7 +381,7 @@ local l =
self:settext(getClearTypeFromScore(pn, score, 0))
self:diffuse(getClearTypeFromScore(pn, score, 2))
end
- },rtLeaderboard callbacks
+ },
LoadFont("Common Normal") ..
{
Name = "Combo",
From 8a5dbbaaaea86b3ae5cbeeece92973a93adc4807 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 15:17:27 -0500
Subject: [PATCH 008/320] fix scoretab not updating properly when tabs are
swtiched
---
.../BGAnimations/ScreenSelectMusic decorations/score.lua | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
index abcc07938b..c344eea749 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
@@ -225,7 +225,7 @@ local t =
BeginCommand = function(self)
SCREENMAN:GetTopScreen():AddInputCallback(input)
end,
- SetCommand = function(self)
+ OnCommand = function(self)
if nestedTab == 1 and self:GetVisible() then
if GAMESTATE:GetCurrentSong() ~= nil then
rtTable = getRateTable()
From 5f83ccd4c11a9e304c060c9086288c88dadf7f7c Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 15:22:19 -0500
Subject: [PATCH 009/320] explicitly set chartpreview notefield visibility when
toggling
---
.../BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index b6b6168a3f..a3f26d7664 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -117,9 +117,11 @@ local function toggleNoteField()
if song then
if mcbootlarder:GetVisible() then
mcbootlarder:visible(false)
+ mcbootlarder:GetChild("NoteField"):visible(false)
MESSAGEMAN:Broadcast("ChartPreviewOff")
else
mcbootlarder:visible(true)
+ mcbootlarder:GetChild("NoteField"):visible(true)
MESSAGEMAN:Broadcast("ChartPreviewOn")
end
end
From f416a99907b862d6b01572726b4e5060c5b977e6 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 15:31:08 -0500
Subject: [PATCH 010/320] remove unnecessary and unanswered visibility set in
cdgraphs
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 1 -
1 file changed, 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index 80fc8ab849..17da340203 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -43,7 +43,6 @@ local function updateGraphMultiVertex(parent, realgraph)
-- reset everything if theres nothing to show
realgraph:SetVertices({})
realgraph:SetDrawState( {Mode = "DrawMode_Quads", First = 0, Num = 0} )
- realgraph:visible(false)
return
end
From 47ed239e3ca443012343971721491b76fe8b0432 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 15:49:22 -0500
Subject: [PATCH 011/320] properly center chartpreview notefields
---
.../BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua | 3 +--
Themes/Til Death/BGAnimations/_chartpreview.lua | 1 +
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index a3f26d7664..9a4ae14e4b 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -9,7 +9,6 @@ local noteField = false
local heyiwasusingthat = false
local mcbootlarder
local prevX = capWideScale(get43size(98), 98)
-local idkwhatimdoing = capWideScale(prevX+8, prevX/2+4)
local usingreverse = GAMESTATE:GetPlayerState(PLAYER_1):GetCurrentPlayerOptions():UsingReverse()
local prevY = 55
local prevrevY = 208
@@ -108,7 +107,7 @@ local function toggleNoteField()
MESSAGEMAN:Broadcast("ChartPreviewOn") -- for banner reaction... lazy -mina
mcbootlarder:playcommand("SetupNoteField")
mcbootlarder:xy(prevX,prevY)
- mcbootlarder:GetChild("NoteField"):xy(prevX+idkwhatimdoing, prevY*1.5)
+ mcbootlarder:GetChild("NoteField"):y(prevY*1.5)
if usingreverse then
mcbootlarder:GetChild("NoteField"):y(prevY*1.5 + prevrevY)
end
diff --git a/Themes/Til Death/BGAnimations/_chartpreview.lua b/Themes/Til Death/BGAnimations/_chartpreview.lua
index 84db559800..01cabb5678 100644
--- a/Themes/Til Death/BGAnimations/_chartpreview.lua
+++ b/Themes/Til Death/BGAnimations/_chartpreview.lua
@@ -26,6 +26,7 @@ local function setUpPreviewNoteField()
yeet:zoom(prevZoom):draworder(90)
SCREENMAN:GetTopScreen():dootforkfive(memehamstermax)
yeet = memehamstermax:GetChild("NoteField")
+ yeet:x(wodth/2)
memehamstermax:SortByDrawOrder()
MESSAGEMAN:Broadcast("NoteFieldVisible")
end
From bf195c03191c73ed17f84795031194c1991c208e Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 16:22:36 -0500
Subject: [PATCH 012/320] cleanup old stuff in songbg
---
Themes/Til Death/BGAnimations/_songbg.lua | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/_songbg.lua b/Themes/Til Death/BGAnimations/_songbg.lua
index eaf12db8d2..93d7019199 100644
--- a/Themes/Til Death/BGAnimations/_songbg.lua
+++ b/Themes/Til Death/BGAnimations/_songbg.lua
@@ -1,7 +1,3 @@
-local magnitude = 0.03
-local maxDistX = SCREEN_WIDTH * magnitude
-local maxDistY = SCREEN_HEIGHT * magnitude
-
local enabled = themeConfig:get_data().global.SongBGEnabled
local brightness = 0.3
@@ -13,21 +9,12 @@ if enabled then
CurrentSongChangedMessageCommand = function(self)
self:finishtweening():smooth(0.5):diffusealpha(0):sleep(0.2):queuecommand("ModifySongBackground")
end,
- BeginCommand = function(self)
- self:scaletocover(0, 0, SCREEN_WIDTH + maxDistX / 4, SCREEN_BOTTOM + maxDistY / 4):diffusealpha(0.3)
- end,
ModifySongBackgroundCommand = function(self)
self:finishtweening()
- collectgarbage()
if GAMESTATE:GetCurrentSong() and GAMESTATE:GetCurrentSong():GetBackgroundPath() then
self:finishtweening()
self:visible(true)
self:LoadBackground(GAMESTATE:GetCurrentSong():GetBackgroundPath())
- if moveBG then
- self:scaletocover(0 - maxDistY / 8, 0 - maxDistY / 8, SCREEN_WIDTH + maxDistX / 8, SCREEN_BOTTOM + maxDistY / 8)
- else
- self:scaletocover(0, 0, SCREEN_WIDTH, SCREEN_BOTTOM)
- end
self:scaletocover(0, 0, SCREEN_WIDTH, SCREEN_BOTTOM)
self:sleep(0.25)
self:smooth(0.5)
From c708453ea3e021c98a0f725eab4e1b1c6732f8b7 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 16:23:20 -0500
Subject: [PATCH 013/320] move lua collect garbage call to select music default
---
.../BGAnimations/ScreenSelectMusic decorations/default.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/default.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/default.lua
index 78b3f38f79..1c677736c0 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/default.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/default.lua
@@ -90,4 +90,5 @@ t[#t + 1] =
}
t[#t + 1] = LoadActor("../_mousewheelscroll")
+collectgarbage()
return t
From 0d3f2a731a6e0e49ca88dd0979c8b3ce3a8cca59 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 17:20:55 -0500
Subject: [PATCH 014/320] fix delayed online leaderboard load theme error
---
Themes/Til Death/BGAnimations/superscoreboard.lua | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/superscoreboard.lua b/Themes/Til Death/BGAnimations/superscoreboard.lua
index 8f5d89d137..af438eb684 100644
--- a/Themes/Til Death/BGAnimations/superscoreboard.lua
+++ b/Themes/Til Death/BGAnimations/superscoreboard.lua
@@ -106,9 +106,11 @@ local o =
SCREENMAN:GetTopScreen():AddInputCallback(input)
end,
ChartLeaderboardUpdateMessageCommand = function(self)
- scoretable = DLMAN:GetChartLeaderBoard(GAMESTATE:GetCurrentSteps(PLAYER_1):GetChartKey(), currentCountry)
- ind = 0
- self:playcommand("Update")
+ if GAMESTATE:GetCurrentSong() then
+ scoretable = DLMAN:GetChartLeaderBoard(GAMESTATE:GetCurrentSteps(PLAYER_1):GetChartKey(), currentCountry)
+ ind = 0
+ self:playcommand("Update")
+ end
end,
BortCommand = function(self)
scoretable = {}
From 7aaf002fcb08960d4927884a708a44f341ccb1b9 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 17:28:27 -0500
Subject: [PATCH 015/320] added possibly templateable mouse select for profile
screen
the whole screen should probably be rewritten though
---
.../ScreenSelectProfile overlay.lua | 34 +++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectProfile overlay.lua b/Themes/Til Death/BGAnimations/ScreenSelectProfile overlay.lua
index 5c8c0c10ab..190eb14252 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectProfile overlay.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectProfile overlay.lua
@@ -1,4 +1,30 @@
---Commenting out the Player 2 stuff so if someone is attempting to use this theme for versus or 2P side, it's not going to work. Go use Prim's original spawnhack theme for that. -Misterkister
+local function selectprofile(self)
+ if isOver(self) then
+ SCREENMAN:GetTopScreen():SetProfileIndex(PLAYER_1, self:GetParent():GetName() + 1)
+ SCREENMAN:GetTopScreen():Finish()
+ end
+end
+local function genericHighlight(self, highlight, base, clickaction)
+ self:SetUpdateFunction(function(self)
+ self:RunCommandsOnChildren(
+ function(self)
+ if isOver(self) then
+ self:diffusealpha(highlight)
+ else
+ self:diffusealpha(base)
+ end
+ end
+ )
+ end)
+ self:SetUpdateRate(0.5)
+ if clickaction then
+ self:RunCommandsOnChildren(
+ function(self)
+ self:addcommand("LeftClickMessage", clickaction)
+ end
+ )
+ end
+end
function GetLocalProfiles()
local t = {}
@@ -8,11 +34,15 @@ function GetLocalProfiles()
local profile = PROFILEMAN:GetLocalProfileFromIndex(p)
local ProfileCard =
Def.ActorFrame {
+ Name = p,
+ InitCommand = function(self)
+ genericHighlight(self, 0.75, 1, selectprofile)
+ end,
LoadFont("Common Large") ..
{
Text = string.format("%s: %.2f", profile:GetDisplayName(), profile:GetPlayerRating()),
InitCommand = function(self)
- self:xy(34 / 2, -10):zoom(0.4):ztest(true, maxwidth, (200 - 34 - 4) / 0.4)
+ self:xy(34 / 2, -10):zoom(0.4):ztest(true, maxwidth, (200 - 34 - 4) / 0.4)
end
},
LoadFont("Common Normal") ..
From a721e495076043a06180c04ec20c55d680f214b2 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 18:20:10 -0500
Subject: [PATCH 016/320] scale cd graph functions to rate
---
src/Steps.cpp | 13 +++++++------
src/Steps.h | 6 ++++--
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/Steps.cpp b/src/Steps.cpp
index 7cad3e6fe5..07583e6223 100644
--- a/src/Steps.cpp
+++ b/src/Steps.cpp
@@ -688,7 +688,7 @@ Steps::SetCachedRadarValues(const RadarValues& rv)
}
vector
-Steps::GetNPSVector(NoteData& nd, vector nerv, vector etaner)
+Steps::GetNPSVector(NoteData& nd, vector nerv, vector etaner, float rate)
{
vector doot(static_cast(etaner.back()));
int notecounter = 0;
@@ -696,7 +696,7 @@ Steps::GetNPSVector(NoteData& nd, vector nerv, vector etaner)
int curinterval = 0;
for (size_t i = 0; i < nerv.size(); ++i) {
- curinterval = static_cast(etaner[i]);
+ curinterval = static_cast(etaner[i] / rate);
if (curinterval > lastinterval) {
doot[lastinterval] = notecounter;
notecounter = 0;
@@ -714,7 +714,7 @@ Steps::GetNPSVector(NoteData& nd, vector nerv, vector etaner)
}
vector
-Steps::GetCNPSVector(NoteData& nd, vector nerv, vector etaner, int chordsize)
+Steps::GetCNPSVector(NoteData& nd, vector nerv, vector etaner, int chordsize, float rate)
{
vector doot(static_cast(etaner.back()));
int chordnotecounter = 0; // number of NOTES inside chords of this size, so 5 jumps = 10 notes, 3 hands = 9 notes, etc
@@ -902,21 +902,22 @@ class LunaSteps : public Luna
}
static int GetCDGraphVectors(T* p, lua_State* L)
{
+ float rate = FArg(1);
auto nd = p->GetNoteData();
if (nd.IsEmpty())
return 0;
const vector& nerv = nd.BuildAndGetNerv();
const vector& etaner =
- p->GetTimingData()->BuildAndGetEtaner(nerv);
+ p->GetTimingData()->BuildAndGetEtaner(nerv);
// directly using CreateTableFromArray(p->GetNPSVector(nd, nerv, etaner), L) produced tables full of 0 values for ???? reason -mina
- vector scroot = p->GetNPSVector(nd, nerv, etaner);
+ vector scroot = p->GetNPSVector(nd, nerv, etaner, rate);
lua_newtable(L);
LuaHelpers::CreateTableFromArray(scroot, L);
lua_rawseti(L, -2, 1);
for (int i = 1; i < nd.GetNumTracks(); ++i) {
- scroot = p->GetCNPSVector(nd, nerv, etaner, i + 1); // sort of confusing: the luatable pos/chordsize are i + 1
+ scroot = p->GetCNPSVector(nd, nerv, etaner, i + 1, rate);// sort of confusing: the luatable pos/chordsize are i + 1
LuaHelpers::CreateTableFromArray(scroot, L); // but we're iterating over tracks which are 0 indexed
lua_rawseti(L, -2, i + 1); // so jumps are position 2 and 2 notes each when i = 1 -mina
}
diff --git a/src/Steps.h b/src/Steps.h
index 2a4d39aa0d..e4af8febfa 100644
--- a/src/Steps.h
+++ b/src/Steps.h
@@ -142,7 +142,8 @@ class Steps
// self exaplanatory -mina
vector GetNPSVector(NoteData& nd,
vector nerv,
- vector etaner);
+ vector etaner,
+ float rate);
// takes size of chord and counts how many -NOTES- are in
// chords of that exact size (this functionally means
// multiplying chord counter by chord size) in a row -mina
@@ -150,7 +151,8 @@ class Steps
vector GetCNPSVector(NoteData& nd,
vector nerv,
vector etaner,
- int chordsize);
+ int chordsize,
+ float rate);
float PredictMeter() const { return 1.f; }
unsigned GetHash() const;
From 86e7401f79c9d5085329f6f5e851eab1b6e5479f Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 18:20:55 -0500
Subject: [PATCH 017/320] give lua access to notedata numcols from steps
objects
---
src/Steps.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/Steps.cpp b/src/Steps.cpp
index 07583e6223..ed6e43566d 100644
--- a/src/Steps.cpp
+++ b/src/Steps.cpp
@@ -722,7 +722,7 @@ Steps::GetCNPSVector(NoteData& nd, vector nerv, vector etaner, int c
int curinterval = 0;
for (size_t i = 0; i < nerv.size(); ++i) {
- curinterval = static_cast(etaner[i]);
+ curinterval = static_cast(etaner[i] / rate);
if (curinterval > lastinterval) {
doot[lastinterval] = chordnotecounter;
chordnotecounter = 0;
@@ -925,7 +925,11 @@ class LunaSteps : public Luna
p->GetTimingData()->UnsetEtaner();
return 1;
}
-
+ static int GetNumColumns(T* p, lua_State* L)
+ {
+ lua_pushnumber(L, p->GetNoteData().GetNumTracks());
+ return 1;
+ }
LunaSteps()
{
ADD_METHOD(GetAuthorCredit);
@@ -955,6 +959,7 @@ class LunaSteps : public Luna
ADD_METHOD(GetDisplayBPMType);
ADD_METHOD(GetRelevantSkillsetsByMSDRank);
ADD_METHOD(GetCDGraphVectors);
+ ADD_METHOD(GetNumColumns);
}
};
From 8b10acab090ddbc074c5d30094e95caa04e468f2 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 18:29:06 -0500
Subject: [PATCH 018/320] update cdgraph lua side to update with rates
---
.../BGAnimations/_chorddensitygraph.lua | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index 17da340203..a3f5aaa5a8 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -23,22 +23,26 @@ local function makeABar(vertices, x, y, barWidth, barHeight, prettycolor)
vertices[#vertices + 1] = {{x,y,0},prettycolor}
end
-local function getColorForDensity(density)
+local function getColorForDensity(density, ncol)
if density == 1 then
return color(".75,.75,.75") -- nps color
+ elseif density == ncol then
+ return color(".1,.1,.1") -- biggest chord color
elseif density == 2 then
return color(".5,.5,.5") -- jumps color
elseif density == 3 then
return color(".25,.25,.25") -- hands color
- else
- return color(".1,.1,.1") -- quads color
+ --else
+ --local c = lerp(density / (ncol +1 ), .1, .75) -- im sure we can programmatically handle n columns but im too lazy
+ --return color(c..","..c..","..c..","..c) -- to make this look nice atm -mina
end
end
local function updateGraphMultiVertex(parent, realgraph)
local steps = GAMESTATE:GetCurrentSteps(PLAYER_1)
if steps then
- local graphVectors = steps:GetCDGraphVectors()
+ local ncol = steps:GetNumColumns()
+ local graphVectors = steps:GetCDGraphVectors(getCurRateValue())
if graphVectors == nil then
-- reset everything if theres nothing to show
realgraph:SetVertices({})
@@ -66,7 +70,7 @@ local function updateGraphMultiVertex(parent, realgraph)
for density = 1,4 do
for column = 1,numberOfColumns do
if graphVectors[density][column] > 0 then
- local barColor = getColorForDensity(density)
+ local barColor = getColorForDensity(density, ncol)
makeABar(verts, column * columnWidth, yOffset, columnWidth, graphVectors[density][column] * 2 * hodth, barColor)
end
end
@@ -86,6 +90,11 @@ local t = Def.ActorFrame {
DelayedChartUpdateMessageCommand = function(self)
self:queuecommand("GraphUpdate")
end,
+ CurrentRateChangedMessageCommand = function(self)
+ if self:GetParent():GetVisible() then
+ self:queuecommand("GraphUpdate")
+ end
+ end,
Def.Quad {
Name = "cdbg",
InitCommand = function(self)
From 3539b08349b9ab939004868689f9ac8badad6429 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 19:27:39 -0500
Subject: [PATCH 019/320] clamp min rate to 1.0 in cdgraphs because it crashes
below that
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 5 +++--
src/Steps.cpp | 1 +
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index a3f5aaa5a8..ee69d65f31 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -42,7 +42,8 @@ local function updateGraphMultiVertex(parent, realgraph)
local steps = GAMESTATE:GetCurrentSteps(PLAYER_1)
if steps then
local ncol = steps:GetNumColumns()
- local graphVectors = steps:GetCDGraphVectors(getCurRateValue())
+ local rate = math.max(1, getCurRateValue())
+ local graphVectors = steps:GetCDGraphVectors(rate)
if graphVectors == nil then
-- reset everything if theres nothing to show
realgraph:SetVertices({})
@@ -52,7 +53,7 @@ local function updateGraphMultiVertex(parent, realgraph)
local npsVector = graphVectors[1] -- refers to the cps vector for 1 (tap notes)
local numberOfColumns = #npsVector
- local columnWidth = wodth/numberOfColumns
+ local columnWidth = wodth/numberOfColumns * rate
-- set height scale of graph relative to the max nps
local hodth = 0
diff --git a/src/Steps.cpp b/src/Steps.cpp
index ed6e43566d..d6bb4b65a4 100644
--- a/src/Steps.cpp
+++ b/src/Steps.cpp
@@ -903,6 +903,7 @@ class LunaSteps : public Luna
static int GetCDGraphVectors(T* p, lua_State* L)
{
float rate = FArg(1);
+ CLAMP(rate, 1.f, 2.f);
auto nd = p->GetNoteData();
if (nd.IsEmpty())
return 0;
From c01495eb6209eb7117776fa53d0229f74e859538 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 19:39:13 -0500
Subject: [PATCH 020/320] add text indicator for song position on chartpreview
when seeking
---
Themes/Til Death/BGAnimations/_chartpreview.lua | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chartpreview.lua b/Themes/Til Death/BGAnimations/_chartpreview.lua
index 01cabb5678..c9e290a94e 100644
--- a/Themes/Til Death/BGAnimations/_chartpreview.lua
+++ b/Themes/Til Death/BGAnimations/_chartpreview.lua
@@ -12,7 +12,7 @@ local cd
local function UpdatePreviewPos(self)
if noteField and yeet and SCREENMAN:GetTopScreen():GetName() == "ScreenSelectMusic" then
local pos = SCREENMAN:GetTopScreen():GetPreviewNoteFieldMusicPosition() / musicratio
- self:GetChild("Pos"):zoomto(math.min(pos,wodth), hidth)
+ self:GetChild("Pos"):zoomto(math.min(pos,wodth), hidth)
self:queuecommand("Highlight")
end
end
@@ -93,8 +93,13 @@ local t = Def.ActorFrame {
HighlightCommand = function(self) -- use the bg for detection but move the seek pointer -mina
if isOver(self) then
self:GetParent():GetChild("Seek"):visible(true)
+ self:GetParent():GetChild("Seektext"):visible(true)
self:GetParent():GetChild("Seek"):x(INPUTFILTER:GetMouseX() - self:GetParent():GetX())
+ self:GetParent():GetChild("Seektext"):x(INPUTFILTER:GetMouseX() - self:GetParent():GetX() - 4) -- todo: refactor this lmao -mina
+ self:GetParent():GetChild("Seektext"):y(INPUTFILTER:GetMouseY() - self:GetParent():GetY())
+ self:GetParent():GetChild("Seektext"):settextf("%0.2f", self:GetParent():GetChild("Seek"):GetX() * musicratio / getCurRateValue())
else
+ self:GetParent():GetChild("Seektext"):visible(false)
self:GetParent():GetChild("Seek"):visible(false)
end
end
@@ -110,6 +115,13 @@ local t = Def.ActorFrame {
t[#t + 1] = LoadActor("_chorddensitygraph.lua")
-- more draw order shenanigans
+t[#t + 1] = LoadFont("Common Normal") .. {
+ Name = "Seektext",
+ InitCommand = function(self)
+ self:y(8):valign(1):halign(1):draworder(1100):diffuse(color("0.8,0,0")):zoom(0.4)
+ end
+}
+
t[#t + 1] = Def.Quad {
Name = "Seek",
InitCommand = function(self)
From 3f17b7c9a0348381d43ccaefcda80f53868c3d54 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 19:40:28 -0500
Subject: [PATCH 021/320] some bandaids to chartpreview
* give some leeway for the end of the file so we don't begin fadeout before the file actually ends
* if the previewpoint is after the last second of the chart, just start near the beginning
---
src/ScreenSelectMusic.cpp | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index 7b843fde2e..52708bb11c 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -370,7 +370,12 @@ ScreenSelectMusic::CheckBackgroundRequests(bool bForce)
PlayParams.sFile = song->GetMusicPath();
PlayParams.fLengthSeconds =
- song->GetLastSecond() - m_fSampleStartSeconds;
+ song->GetLastSecond() - m_fSampleStartSeconds + 2.f;
+ if (PlayParams.fLengthSeconds < 3.f) { // if the songpreview is after the last note
+ PlayParams.fStartSecond = 5.f; // chartpreview wont play, just set it near the start -mina
+ PlayParams.fLengthSeconds = song->GetLastSecond() + 2.f;
+ }
+
}
SOUND->PlayMusic(PlayParams, FallbackMusic);
@@ -1601,7 +1606,14 @@ ScreenSelectMusic::GeneratePreviewNoteField()
SOUND->StopMusic();
m_sSampleMusicToPlay = song->GetMusicPath();
m_fSampleStartSeconds = max(song->GetFirstSecond() - 4.f, -1.f);
- m_fSampleLengthSeconds = song->GetLastSecond();
+ m_fSampleLengthSeconds =
+ song->GetLastSecond() - m_fSampleStartSeconds + 2.f;
+ if (m_fSampleLengthSeconds <
+ 3.f) { // if the songpreview is after the last note
+ m_fSampleStartSeconds =
+ 5.f; // chartpreview wont play, just set it near the start -mina
+ m_fSampleLengthSeconds = song->GetLastSecond() + 2.f;
+ }
g_bSampleMusicWaiting = true;
CheckBackgroundRequests(true);
From 55ad8234a16ed47220339fbd82749fde96b1050f Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 19:43:03 -0500
Subject: [PATCH 022/320] bandaid to make sure cd bars dont go outside of
bounds
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index ee69d65f31..29c2b7620a 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -72,7 +72,7 @@ local function updateGraphMultiVertex(parent, realgraph)
for column = 1,numberOfColumns do
if graphVectors[density][column] > 0 then
local barColor = getColorForDensity(density, ncol)
- makeABar(verts, column * columnWidth, yOffset, columnWidth, graphVectors[density][column] * 2 * hodth, barColor)
+ makeABar(verts, math.min(column * columnWidth, wodth), yOffset, columnWidth, graphVectors[density][column] * 2 * hodth, barColor)
end
end
end
From 4234038bcdbaa9835d3b8e8d52120d54d9d786a0 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 20:21:36 -0500
Subject: [PATCH 023/320] allow open ended cd graphs
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index 29c2b7620a..8dce875656 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -68,7 +68,7 @@ local function updateGraphMultiVertex(parent, realgraph)
hodth = hidth/hodth
local verts = {} -- reset the vertices for the graph
local yOffset = 0 -- completely unnecessary, just a Y offset from the graph
- for density = 1,4 do
+ for density = 1,ncol do
for column = 1,numberOfColumns do
if graphVectors[density][column] > 0 then
local barColor = getColorForDensity(density, ncol)
From 7eb9a8ea109bac91db2b388448eef2e9b74dfb7a Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 20:24:11 -0500
Subject: [PATCH 024/320] stop preview notefield from regenerating when
entering gameplay
---
.../BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index 9a4ae14e4b..f3c30f37c1 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -623,7 +623,7 @@ t[#t + 1] =
--Chart Preview Button
local yesiwantnotefield = false
-
+local oldstyle
local function ihatestickinginputcallbackseverywhere(event)
if event.type ~= "InputEventType_Release" and getTabIndex() == 0 then
if event.DeviceInput.button == "DeviceButton_space" then
@@ -649,11 +649,12 @@ t[#t + 1] = LoadFont("Common Normal") .. {
end
end,
CurrentStyleChangedMessageCommand=function(self) -- need to regenerate the notefield when changing styles or crashman appears -mina
- if noteField then
+ if noteField and oldstyle ~= GAMESTATE:GetCurrentStyle() then
SCREENMAN:GetTopScreen():DeletePreviewNoteField(mcbootlarder)
noteField = false
toggleNoteField()
end
+ oldstyle = GAMESTATE:GetCurrentStyle()
end
}
From cdd6f5c32d22822eb82ef560bb80d11a2b868d03 Mon Sep 17 00:00:00 2001
From: Nicolas
Date: Sat, 24 Nov 2018 22:44:13 -0300
Subject: [PATCH 025/320] Fix ettmulti selectmusic clicking
---
.../default.lua | 169 +++++-------------
src/ScreenNetSelectMusic.cpp | 2 +-
2 files changed, 41 insertions(+), 130 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenNetSelectMusic decorations/default.lua b/Themes/Til Death/BGAnimations/ScreenNetSelectMusic decorations/default.lua
index 51d53e20d0..a4136b6b65 100644
--- a/Themes/Til Death/BGAnimations/ScreenNetSelectMusic decorations/default.lua
+++ b/Themes/Til Death/BGAnimations/ScreenNetSelectMusic decorations/default.lua
@@ -1,5 +1,12 @@
local t = Def.ActorFrame {}
if NSMAN:IsETTP() then
+ t[#t + 1] =
+ Def.ActorFrame {
+ LeftClickMessageCommand = function()
+ SCREENMAN:SystemMessage("asdasdasd")
+ MESSAGEMAN:Broadcast("MouseLeftClick")
+ end
+ }
t[#t + 1] = LoadActor("../ScreenSelectMusic decorations/default")
return t
end
@@ -96,18 +103,19 @@ g[#g + 1] = LoadActor("radaronline")
g[#g + 1] =
Def.ActorFrame {
+ Name = "StepsDisplay",
InitCommand = function(self)
- self:xy(capWideScale(get43size(384), 384) + 26, 70, halign, 0):valign(0):zoom(math.min(1, SCREEN_WIDTH / 854))
+ self:xy(stepsdisplayx, 70):valign(0)
end,
OffCommand = function(self)
- self:bouncebegin(0.2):xy(capWideScale(get43size(384), 384) + 26 - 500, 70) -- visible(false()
+ self:visible(false)
end,
OnCommand = function(self)
- self:bouncebegin(0.2):xy(capWideScale(get43size(384), 384) + 26, 70)
+ self:visible(true)
end,
TabChangedMessageCommand = function(self)
self:finishtweening()
- if getTabIndex() == 0 then
+ if getTabIndex() < 3 and GAMESTATE:GetCurrentSong() then
self:playcommand("On")
else
self:playcommand("Off")
@@ -115,152 +123,55 @@ g[#g + 1] =
end,
CurrentSongChangedMessageCommand = function(self)
local song = GAMESTATE:GetCurrentSong()
- if song then
- self:finishtweening()
- self:playcommand("TweenOn")
- elseif not song and self:GetZoomX() == 1 then
- self:finishtweening()
- self:playcommand("TweenOff")
+ if song and getTabIndex() < 3 then
+ self:playcommand("On")
+ elseif not song then
+ self:playcommand("Off")
end
end,
+ PlayingSampleMusicMessageCommand = function(self)
+ local leaderboardEnabled =
+ playerConfig:get_data(pn_to_profile_slot(PLAYER_1)).leaderboardEnabled and DLMAN:IsLoggedIn()
+ if leaderboardEnabled then
+ local chartkey = GAMESTATE:GetCurrentSteps(PLAYER_1):GetChartKey()
+ DLMAN:RequestChartLeaderBoardFromOnline(
+ chartkey,
+ function(leaderboard)
+ end
+ )
+ end
+ end,
+ ChartPreviewOnMessageCommand = function(self)
+ self:addx(capWideScale(12, 0)):addy(capWideScale(18, 0))
+ end,
+ ChartPreviewOffMessageCommand = function(self)
+ self:addx(capWideScale(-12, 0)):addy(capWideScale(-18, 0))
+ end,
Def.StepsDisplayList {
Name = "StepsDisplayListRow",
CursorP1 = Def.ActorFrame {
InitCommand = function(self)
- self:x(55):player(PLAYER_1)
- end,
- PlayerJoinedMessageCommand = function(self, params)
- if params.Player == PLAYER_1 then
- self:visible(true)
- self:zoom(0):bounceend(1):zoom(1)
- end
- end,
- PlayerUnjoinedMessageCommand = function(self, params)
- if params.Player == PLAYER_1 then
- self:visible(true)
- self:bouncebegin(1):zoom(0)
- end
- end,
- Def.Quad {
- InitCommand = function(self)
- self:zoomto(6, 22):halign(1):valign(0.5)
- end,
- BeginCommand = function(self)
- self:queuecommand("Set")
- end,
- SetCommand = function(self)
- if GAMESTATE:GetNumPlayersEnabled() >= 2 then
- self:zoomy(11)
- self:valign(1)
- else
- self:zoomy(22)
- self:valign(0.5)
- end
- end,
- PlayerJoinedMessageCommand = function(self)
- self:playcommand("Set")
- end,
- PlayerUnjoinedMessageCommand = function(self)
- self:playcommand("Set")
- end
- },
- LoadFont("Common Normal") ..
- {
- InitCommand = function(self)
- self:x(-1):halign(1):valign(0.5):zoom(0.3):diffuse(color("#000000"))
- end,
- BeginCommand = function(self)
- self:queuecommand("Set")
- end,
- SetCommand = function(self)
- self:settext("1")
- if GAMESTATE:GetNumPlayersEnabled() >= 2 then
- self:y(-6)
- else
- self:y(0)
- end
- end,
- PlayerJoinedMessageCommand = function(self)
- self:playcommand("Set")
- end,
- PlayerUnjoinedMessageCommand = function(self)
- self:playcommand("Set")
- end
- }
- },
- CursorP2 = Def.ActorFrame {
- InitCommand = function(self)
- self:x(55):player(PLAYER_2)
- end,
- PlayerJoinedMessageCommand = function(self, params)
- if params.Player == PLAYER_2 then
- self:visible(true)
- self:zoom(0):bounceend(1):zoom(1)
- end
- end,
- PlayerUnjoinedMessageCommand = function(self, params)
- if params.Player == PLAYER_2 then
- self:visible(true)
- self:bouncebegin(1):zoom(0)
- end
+ self:player(PLAYER_1)
end,
Def.Quad {
InitCommand = function(self)
- self:zoomto(6, 22):halign(1):valign(0.5)
+ self:x(54):zoomto(6, 20):halign(1):valign(0.5)
end,
BeginCommand = function(self)
self:queuecommand("Set")
end,
SetCommand = function(self)
- if GAMESTATE:GetNumPlayersEnabled() >= 2 then
- self:zoomy(11)
- self:valign(0)
- else
- self:zoomy(22)
- self:valign(0.5)
- end
- end,
- PlayerJoinedMessageCommand = function(self)
- self:playcommand("Set")
- end,
- PlayerUnjoinedMessageCommand = function(self)
- self:playcommand("Set")
+ self:zoomy(20)
end
- },
- LoadFont("Common Normal") ..
- {
- InitCommand = function(self)
- self:x(-1):halign(1):valign(0.5):zoom(0.3):diffuse(color("#000000"))
- end,
- BeginCommand = function(self)
- self:queuecommand("Set")
- end,
- SetCommand = function(self)
- self:settext("2")
- if GAMESTATE:GetNumPlayersEnabled() >= 2 then
- self:y(6)
- else
- self:y(0)
- end
- end,
- PlayerJoinedMessageCommand = function(self)
- self:playcommand("Set")
- end,
- PlayerUnjoinedMessageCommand = function(self)
- self:playcommand("Set")
- end
- }
+ }
},
+ CursorP2 = Def.ActorFrame {},
CursorP1Frame = Def.Actor {
ChangeCommand = function(self)
self:stoptweening():decelerate(0.05)
end
},
- CursorP2Frame = Def.Actor {
- ChangeCommand = function(self)
- self:stoptweening():decelerate(0.05)
- end
- }
+ CursorP2Frame = Def.Actor {}
}
}
t[#t + 1] = g
diff --git a/src/ScreenNetSelectMusic.cpp b/src/ScreenNetSelectMusic.cpp
index b2cb26a6eb..b94e07c3d8 100644
--- a/src/ScreenNetSelectMusic.cpp
+++ b/src/ScreenNetSelectMusic.cpp
@@ -99,7 +99,7 @@ ScreenNetSelectMusic::Init()
NSMAN->OnMusicSelect();
m_bInitialSelect = false;
- m_bAllowInput = false;
+ m_bAllowInput = NSMAN->IsETTP();
SAMPLE_MUSIC_FALLBACK_FADE_IN_SECONDS.Load(
m_sName, "SampleMusicFallbackFadeInSeconds");
From f099fe7fdc41e5ad379e55c69eeec7687698d1bb Mon Sep 17 00:00:00 2001
From: Nicolas
Date: Sat, 24 Nov 2018 22:45:21 -0300
Subject: [PATCH 026/320] More lua docs stuff
---
Themes/_fallback/docs/Actor.luadoc | 705 +++++++++++++++++++
Themes/_fallback/docs/ActorFrame.luadoc | 108 +++
Themes/_fallback/docs/BitmapText.luadoc | 74 ++
Themes/_fallback/docs/Sprite.luadoc | 112 +++
Themes/_fallback/docs/markdown/QuickStart.md | 8 +-
5 files changed, 1003 insertions(+), 4 deletions(-)
create mode 100644 Themes/_fallback/docs/Actor.luadoc
create mode 100644 Themes/_fallback/docs/ActorFrame.luadoc
create mode 100644 Themes/_fallback/docs/BitmapText.luadoc
create mode 100644 Themes/_fallback/docs/Sprite.luadoc
diff --git a/Themes/_fallback/docs/Actor.luadoc b/Themes/_fallback/docs/Actor.luadoc
new file mode 100644
index 0000000000..a3e2e5e1df
--- /dev/null
+++ b/Themes/_fallback/docs/Actor.luadoc
@@ -0,0 +1,705 @@
+--- Basic Actor class
+-- @classmod Actor
+
+
+--- Get the name of this specific actor instance
+-- Usually set as Def.Actor{Name = "string"}
+-- @treturn Actor self
+function Actor:name() end
+
+--- Inserts a linear tween of seconds time and then a 0 seconds empty tween
+-- to force the future tweens to happen after seconds seconds elapse
+-- @number seconds
+-- @treturn Actor self
+function Actor:sleep(seconds) end
+
+--- Inserts a linear tween of seconds time
+-- @number seconds
+-- @treturn Actor self
+function Actor:linear(seconds) end
+
+--- Inserts an accelerate tween of seconds time
+-- @number seconds
+-- @treturn Actor self
+function Actor:accelerate(seconds) end
+
+--- Inserts a decelerate tween of seconds time
+-- @number seconds
+-- @treturn Actor self
+function Actor:decelerate(seconds) end
+
+--- Inserts a spring tween of seconds time
+-- @number seconds
+-- @treturn Actor self
+function Actor:spring(seconds) end
+
+--- Inserts a tween of tweenType with seconds duration
+-- @number seconds
+-- @treturn Actor self
+function Actor:tween(seconds, tweenType) end
+
+--- Immediately cancels/stops all tweens left for this actor
+-- @treturn Actor self
+function Actor:stoptweening() end
+
+--- Immediately finish all tweens left for this actor
+-- This reaches the final state of the tweens in succession
+-- @treturn Actor self
+function Actor:finishtweening() end
+
+---
+-- @number factor the ratio for the new tween speedup (Or slowdown)
+-- @treturn Actor self
+function Actor:hurrytweening(factor) end
+
+---
+-- @treturn Actor self
+function Actor:GetTweenTimeLeft() end
+
+--- Set this actors horizontal position
+-- 0 is the left edge of the screen
+-- @number x The new horizontal position to set
+-- @treturn Actor self
+function Actor:x(x) end
+
+--- Set this actors vertical position
+-- 0 is the top edge of the screen
+-- @number y The new vertical position to set
+-- @treturn Actor self
+function Actor:y(y) end
+
+--- Set this actors normal position
+-- @number z The new position to set
+-- @treturn Actor self
+function Actor:z(z) end
+
+--- Set this actors x and y position easily in one method
+-- Just for convenience
+-- @number x The new horizontal position to set
+-- @number y The new vertical position to set
+-- @treturn Actor self
+function Actor:xy(x, y) end
+
+---
+-- @treturn Actor self
+function Actor:addx() end
+
+---
+-- @treturn Actor self
+function Actor:addy() end
+
+---
+-- @treturn Actor self
+function Actor:addz() end
+
+---
+-- @treturn Actor self
+function Actor:zoom() end
+
+---
+-- @treturn Actor self
+function Actor:zoomx() end
+
+---
+-- @treturn Actor self
+function Actor:zoomy() end
+
+---
+-- @treturn Actor self
+function Actor:zoomz() end
+
+---
+-- @treturn Actor self
+function Actor:zoomto() end
+
+---
+-- @treturn Actor self
+function Actor:zoomtowidth() end
+
+---
+-- @treturn Actor self
+function Actor:zoomtoheight() end
+
+---
+-- @treturn Actor self
+function Actor:setsize() end
+
+---
+-- @treturn Actor self
+function Actor:SetWidth() end
+
+---
+-- @treturn Actor self
+function Actor:SetHeight() end
+
+---
+-- @treturn Actor self
+function Actor:basealpha() end
+
+---
+-- @treturn Actor self
+function Actor:basezoom() end
+
+---
+-- @treturn Actor self
+function Actor:basezoomx() end
+
+---
+-- @treturn Actor self
+function Actor:basezoomy() end
+
+---
+-- @treturn Actor self
+function Actor:basezoomz() end
+
+---
+-- @treturn Actor self
+function Actor:stretchto() end
+
+---
+-- @treturn Actor self
+function Actor:cropleft() end
+
+---
+-- @treturn Actor self
+function Actor:croptop() end
+
+---
+-- @treturn Actor self
+function Actor:cropright() end
+
+---
+-- @treturn Actor self
+function Actor:cropbottom() end
+
+---
+-- @treturn Actor self
+function Actor:fadeleft() end
+
+---
+-- @treturn Actor self
+function Actor:fadetop() end
+
+---
+-- @treturn Actor self
+function Actor:faderight() end
+
+---
+-- @treturn Actor self
+function Actor:fadebottom() end
+
+---
+-- @treturn Actor self
+function Actor:diffuse() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseupperleft() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseupperright() end
+
+---
+-- @treturn Actor self
+function Actor:diffuselowerleft() end
+
+---
+-- @treturn Actor self
+function Actor:diffuselowerright() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseleftedge() end
+
+---
+-- @treturn Actor self
+function Actor:diffuserightedge() end
+
+---
+-- @treturn Actor self
+function Actor:diffusetopedge() end
+
+---
+-- @treturn Actor self
+function Actor:diffusebottomedge() end
+
+---
+-- @treturn Actor self
+function Actor:diffusealpha() end
+
+---
+-- @treturn Actor self
+function Actor:diffusecolor() end
+
+---
+-- @treturn Actor self
+function Actor:glow() end
+
+---
+-- @treturn Actor self
+function Actor:aux() end
+
+---
+-- @treturn Actor self
+function Actor:getaux() end
+
+---
+-- @treturn Actor self
+function Actor:rotationx() end
+
+---
+-- @treturn Actor self
+function Actor:rotationy() end
+
+---
+-- @treturn Actor self
+function Actor:rotationz() end
+
+---
+-- @treturn Actor self
+function Actor:addrotationx() end
+
+---
+-- @treturn Actor self
+function Actor:addrotationy() end
+
+---
+-- @treturn Actor self
+function Actor:addrotationz() end
+
+---
+-- @treturn Actor self
+function Actor:getrotation() end
+
+---
+-- @treturn Actor self
+function Actor:baserotationx() end
+
+---
+-- @treturn Actor self
+function Actor:baserotationy() end
+
+---
+-- @treturn Actor self
+function Actor:baserotationz() end
+
+---
+-- @treturn Actor self
+function Actor:skewx() end
+
+---
+-- @treturn Actor self
+function Actor:skewy() end
+
+---
+-- @treturn Actor self
+function Actor:heading() end
+
+---
+-- @treturn Actor self
+function Actor:pitch() end
+
+---
+-- @treturn Actor self
+function Actor:roll() end
+
+---
+-- @treturn Actor self
+function Actor:shadowlength() end
+
+---
+-- @treturn Actor self
+function Actor:shadowlengthx() end
+
+---
+-- @treturn Actor self
+function Actor:shadowlengthy() end
+
+---
+-- @treturn Actor self
+function Actor:shadowcolor() end
+
+---
+-- @treturn Actor self
+function Actor:horizalign() end
+
+---
+-- @treturn Actor self
+function Actor:vertalign() end
+
+---
+-- @treturn Actor self
+function Actor:halign() end
+
+---
+-- @treturn Actor self
+function Actor:valign() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseblink() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseshift() end
+
+---
+-- @treturn Actor self
+function Actor:diffuseramp() end
+
+---
+-- @treturn Actor self
+function Actor:glowblink() end
+
+---
+-- @treturn Actor self
+function Actor:glowshift() end
+
+---
+-- @treturn Actor self
+function Actor:glowramp() end
+
+---
+-- @treturn Actor self
+function Actor:rainbow() end
+
+---
+-- @treturn Actor self
+function Actor:wag() end
+
+---
+-- @treturn Actor self
+function Actor:bounce() end
+
+---
+-- @treturn Actor self
+function Actor:bob() end
+
+---
+-- @treturn Actor self
+function Actor:pulse() end
+
+---
+-- @treturn Actor self
+function Actor:spin() end
+
+---
+-- @treturn Actor self
+function Actor:vibrate() end
+
+---
+-- @treturn Actor self
+function Actor:stopeffect() end
+
+---
+-- @treturn Actor self
+function Actor:effectcolor1() end
+
+---
+-- @treturn Actor self
+function Actor:effectcolor2() end
+
+---
+-- @treturn Actor self
+function Actor:effectperiod() end
+
+---
+-- @treturn Actor self
+function Actor:effecttiming() end
+
+---
+-- @treturn Actor self
+function Actor:effect_hold_at_full() end
+
+---
+-- @treturn Actor self
+function Actor:effectoffset() end
+
+---
+-- @treturn Actor self
+function Actor:effectclock() end
+
+---
+-- @treturn Actor self
+function Actor:effectmagnitude() end
+
+---
+-- @treturn Actor self
+function Actor:geteffectmagnitude() end
+ ADD_GET_SET_METHODS(tween_uses_effect_delta);
+
+---
+-- @treturn Actor self
+function Actor:scaletocover() end
+
+---
+-- @treturn Actor self
+function Actor:scaletofit() end
+
+---
+-- @treturn Actor self
+function Actor:animate() end
+
+---
+-- @treturn Actor self
+function Actor:play() end
+
+---
+-- @treturn Actor self
+function Actor:pause() end
+
+---
+-- @treturn Actor self
+function Actor:setstate() end
+
+---
+-- @treturn Actor self
+function Actor:GetNumStates() end
+
+---
+-- @treturn Actor self
+function Actor:texturetranslate() end
+
+---
+-- @treturn Actor self
+function Actor:texturewrapping() end
+
+---
+-- @treturn Actor self
+function Actor:SetTextureFiltering() end
+
+---
+-- @treturn Actor self
+function Actor:blend() end
+
+---
+-- @treturn Actor self
+function Actor:zbuffer() end
+
+---
+-- @treturn Actor self
+function Actor:ztest() end
+
+---
+-- @treturn Actor self
+function Actor:ztestmode() end
+
+---
+-- @treturn Actor self
+function Actor:zwrite() end
+
+---
+-- @treturn Actor self
+function Actor:zbias() end
+
+---
+-- @treturn Actor self
+function Actor:clearzbuffer() end
+
+---
+-- @treturn Actor self
+function Actor:backfacecull() end
+
+---
+-- @treturn Actor self
+function Actor:cullmode() end
+
+---
+-- @treturn Actor self
+function Actor:visible() end
+
+---
+-- @treturn Actor self
+function Actor:hibernate() end
+
+---
+-- @treturn Actor self
+function Actor:draworder() end
+
+---
+-- @treturn Actor self
+function Actor:playcommand() end
+
+---
+-- @treturn Actor self
+function Actor:queuecommand() end
+
+---
+-- @treturn Actor self
+function Actor:queuemessage() end
+
+---
+-- @treturn Actor self
+function Actor:addcommand() end
+
+---
+-- @treturn Actor self
+function Actor:GetCommand() end
+
+---
+-- @treturn Actor self
+function Actor:RunCommandsRecursively() end
+
+--- Get X position (horizontal)
+-- 0 is leftmost
+-- @treturn number the horizontal x position.
+function Actor:GetX() end
+
+
+--- Get Y position (vertical)
+-- 0 is topmost
+-- @treturn number the vertical y position.
+function Actor:GetY() end
+
+
+--- Get Z position
+-- @treturn number the z position.
+function Actor:GetZ() end
+
+---
+-- @treturn Actor self
+function Actor:GetDestX() end
+
+---
+-- @treturn Actor self
+function Actor:GetDestY() end
+
+---
+-- @treturn Actor self
+function Actor:GetDestZ() end
+
+---
+-- @treturn Actor self
+function Actor:GetWidth() end
+
+---
+-- @treturn Actor self
+function Actor:GetHeight() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoomedWidth() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoomedHeight() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoom() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoomX() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoomY() end
+
+---
+-- @treturn Actor self
+function Actor:GetZoomZ() end
+
+---
+-- @treturn Actor self
+function Actor:GetRotationX() end
+
+---
+-- @treturn Actor self
+function Actor:GetRotationY() end
+
+---
+-- @treturn Actor self
+function Actor:GetRotationZ() end
+
+---
+-- @treturn Actor self
+function Actor:GetBaseZoomX() end
+
+---
+-- @treturn Actor self
+function Actor:GetBaseZoomY() end
+
+---
+-- @treturn Actor self
+function Actor:GetBaseZoomZ() end
+
+---
+-- @treturn Actor self
+function Actor:GetSecsIntoEffect() end
+
+---
+-- @treturn Actor self
+function Actor:GetEffectDelta() end
+
+---
+-- @treturn Actor self
+function Actor:GetDiffuse() end
+
+---
+-- @treturn Actor self
+function Actor:GetDiffuseAlpha() end
+
+---
+-- @treturn Actor self
+function Actor:GetGlow() end
+
+---
+-- @treturn Actor self
+function Actor:GetVisible() end
+
+---
+-- @treturn Actor self
+function Actor:GetHAlign() end
+
+---
+-- @treturn Actor self
+function Actor:GetVAlign() end
+
+
+---
+-- @treturn Actor self
+function Actor:GetName() end
+
+---
+-- @treturn Actor self
+function Actor:GetParent() end
+
+---
+-- @treturn Actor self
+function Actor:GetFakeParent() end
+
+---
+-- @treturn Actor self
+function Actor:SetFakeParent() end
+
+---
+-- @treturn Actor self
+function Actor:AddWrapperState() end
+
+---
+-- @treturn Actor self
+function Actor:RemoveWrapperState() end
+
+---
+-- @treturn Actor self
+function Actor:GetNumWrapperStates() end
+
+---
+-- @treturn Actor self
+function Actor:GetWrapperState() end
+
+
+---
+-- @treturn Actor self
+function Actor:Draw() end
+
+
+---
+-- @treturn Actor self
+function Actor:SaveXY() end
+
+---
+-- @treturn Actor self
+function Actor:LoadXY() end
\ No newline at end of file
diff --git a/Themes/_fallback/docs/ActorFrame.luadoc b/Themes/_fallback/docs/ActorFrame.luadoc
new file mode 100644
index 0000000000..eee51464f3
--- /dev/null
+++ b/Themes/_fallback/docs/ActorFrame.luadoc
@@ -0,0 +1,108 @@
+--- Actor container/composite
+-- @classmod ActorFrame
+
+
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:playcommandonchildren() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:playcommandonleaves() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:runcommandsonleaves() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:RunCommandsOnChildren() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:propagate() end // deprecated
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:fov() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetUpdateRate() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:GetUpdateRate() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetFOV() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:vanishpoint() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:GetChild() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:GetChildren() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:GetNumChildren() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetDrawByZPosition() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetDrawFunction() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:GetDrawFunction() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetUpdateFunction() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SortByDrawOrder() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetAmbientLightColor() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetDiffuseLightColor() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetSpecularLightColor() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:SetLightDirection() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:AddChild() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:AddChildFromPath() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:RemoveChild() end
+
+---
+-- @treturn ActorFrame self
+function ActorFrame:RemoveAllChildren() end
\ No newline at end of file
diff --git a/Themes/_fallback/docs/BitmapText.luadoc b/Themes/_fallback/docs/BitmapText.luadoc
new file mode 100644
index 0000000000..0a88128e9b
--- /dev/null
+++ b/Themes/_fallback/docs/BitmapText.luadoc
@@ -0,0 +1,74 @@
+--- Font actor
+-- @classmod BitmapText
+
+
+---
+-- @treturn BitmapText self
+function BitmapText:wrapwidthpixels() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:maxwidth() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:maxheight() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:max_dimension_use_zoom() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:vertspacing() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:settext() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:rainbowscroll() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:jitter() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:distort() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:undistort() end
+ ADD_GET_SET_METHODS(mult_attrs_with_diffuse);
+
+---
+-- @treturn BitmapText self
+function BitmapText:GetText() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:AddAttribute() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:ClearAttributes() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:strokecolor() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:getstrokecolor() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:uppercase() end
+
+---
+-- @treturn BitmapText self
+function BitmapText:textglowmode() end
+ // ADD_METHOD( LoadFromFont );
+// ADD_METHOD( LoadFromTextureAndChars );
\ No newline at end of file
diff --git a/Themes/_fallback/docs/Sprite.luadoc b/Themes/_fallback/docs/Sprite.luadoc
new file mode 100644
index 0000000000..fba534fcc7
--- /dev/null
+++ b/Themes/_fallback/docs/Sprite.luadoc
@@ -0,0 +1,112 @@
+--- Sprite
+-- @classmod Sprite
+
+
+
+---
+-- @treturn Sprite self
+function Sprite:Load() end
+
+---
+-- @treturn Sprite self
+function Sprite:LoadBanner() end
+
+---
+-- @treturn Sprite self
+function Sprite:LoadBackground() end
+
+---
+-- @treturn Sprite self
+function Sprite:LoadFromCached() end
+
+---
+-- @treturn Sprite self
+function Sprite:customtexturerect() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetCustomImageRect() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetCustomPosCoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:StopUsingCustomPosCoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:texcoordvelocity() end
+
+---
+-- @treturn Sprite self
+function Sprite:get_use_effect_clock_for_texcoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:set_use_effect_clock_for_texcoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:scaletoclipped() end
+
+---
+-- @treturn Sprite self
+function Sprite:CropTo() end
+
+---
+-- @treturn Sprite self
+function Sprite:stretchtexcoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:addimagecoords() end
+
+---
+-- @treturn Sprite self
+function Sprite:setstate() end
+
+---
+-- @treturn Sprite self
+function Sprite:GetState() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetStateProperties() end
+
+---
+-- @treturn Sprite self
+function Sprite:GetAnimationLengthSeconds() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetSecondsIntoAnimation() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetTexture() end
+
+---
+-- @treturn Sprite self
+function Sprite:GetTexture() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetEffectMode() end
+
+---
+-- @treturn Sprite self
+function Sprite:GetNumStates() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetAllStateDelays() end
+
+---
+-- @treturn Sprite self
+function Sprite:GetDecodeMovie() end
+
+---
+-- @treturn Sprite self
+function Sprite:SetDecodeMovie() end
\ No newline at end of file
diff --git a/Themes/_fallback/docs/markdown/QuickStart.md b/Themes/_fallback/docs/markdown/QuickStart.md
index e1d9826578..7f1eb042b8 100644
--- a/Themes/_fallback/docs/markdown/QuickStart.md
+++ b/Themes/_fallback/docs/markdown/QuickStart.md
@@ -2,14 +2,14 @@
A lua file is plain text. To create and edit these you need a plain text editor such as notepad.
-You can use any text editor, but to make your life easier, we recommend that you use vscode. Extensions you may want to use with vscode would definitely be the vscode-lua generic lua extension and the ettlua extension.
+You can use any text editor, but to make your life easier, we recommend that you use [vscode](https://code.visualstudio.com/Download). Extensions you may want to use with [vscode](https://code.visualstudio.com/Download) would definitely be the [vscode-lua](https://marketplace.visualstudio.com/items?itemName=trixnz.vscode-lua) generic lua extension and the [ettlua](https://marketplace.visualstudio.com/items?itemName=Nick12.ettlua-for-vscode) extension.
-If you have no programming language experience whatsoever or you are not familiar with lua and don't think you would be comfortable infering the syntax, it is recommended that you read some lua book or material (Like https://www.lua.org/pil/contents.html , chapter 1 being optional, chapters 2 to 5 recommended and 13,19 and 20 also optional. You're free to read the whole book, but you will probably not get a lot of useful things for lua in this game from the rest).
+If you have no programming language experience whatsoever or you are not familiar with lua and don't think you would be comfortable infering the syntax, it is recommended that you read some lua book or material (Like [Programming In Lua](https://www.lua.org/pil/contents.html), chapter 1 being optional, chapters 2 to 5 recommended and 13,19 and 20 also optional. You're free to read the whole book, but you will probably not get a lot of useful things for lua in this game from the rest).
## Basic Structure
-The game defines a number of `Screen`s. It's possible to define custom `Screens`, but that's not inmediately relevant. Each `Screen` is a container for `Actor`s. Pretty much every Drawable thing is an `Actor`. A container for `Actor`s is actually called an `ActorFrame` (So, `Screen`s are `ActorFrame`s). Lua comes into play in the game when loading `Screen`s. Some lua code is executed when initializing `Screen`s, and it tells the game which `Actor`s it needs to create and add to it. It can also registers a number of `Command`s, which are just lua functions executed on certain events (Usually called by the game engine). Lua code is also executed when the game is executed, on startup, usually to initialize whatever global state it needs to use later, and to define functions globally so they can be available everywhere (Note: Usually it's recommended to "namespace" your global functions, putting them under a table, so as to not pollute the global namespace). A lua file executed at startup is called a `Script` within the context of this game. Sometimes, Screen lua files are called `BGAnimations`, or "BackGround Animations" (Sometimes abbreviated BGAnims).
+The game defines a number of `Screens`. It's possible to define custom `Screens`, but that's not inmediately relevant. Each `Screen` is a container for `Actors`. Pretty much every Drawable thing is an `Actor`. A container for `Actors` is actually called an `ActorFrame` (So, `Screens` are `ActorFrames`). Lua comes into play in the game when loading `Screens`. Some lua code is executed when initializing `Screens`, and it tells the game which `Actors` it needs to create and add to it. It can also registers a number of `Commands`, which are just lua functions executed on certain events (Usually called by the game engine). Lua code is also executed when the game is executed, on startup, usually to initialize whatever global state it needs to use later, and to define functions globally so they can be available everywhere (Note: Usually it's recommended to "namespace" your global functions, putting them under a table, so as to not pollute the global namespace). A lua file executed at startup is called a `Script` within the context of this game. Sometimes, Screen lua files are called `BGAnimations`, or "BackGround Animations" (Sometimes abbreviated BGAnims).
## Screens
-I mentioned lua code can be executed on `Screen` initialization. However, `Screen`s have a second component to them that is of relatively big importance to someone dealing with BGAnims: metrics.ini
+I mentioned lua code can be executed on `Screen` initialization. However, `Screens` have a second component to them that is of relatively big importance to someone dealing with BGAnims: metrics.ini
From 0c976a221c41693353a29218bc0c8fbac4b87777 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 20:56:37 -0500
Subject: [PATCH 027/320] allow song to play its own preview and give lua
access (experimental)
borp
---
.../wifeTwirl.lua | 1 +
src/Song.cpp | 27 ++++++++++++++++---
src/Song.h | 5 +++-
3 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index f3c30f37c1..bd50bbc829 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -114,6 +114,7 @@ local function toggleNoteField()
return end
if song then
+ song:Borp()
if mcbootlarder:GetVisible() then
mcbootlarder:visible(false)
mcbootlarder:GetChild("NoteField"):visible(false)
diff --git a/src/Song.cpp b/src/Song.cpp
index 0de1577cce..e524fb64e8 100644
--- a/src/Song.cpp
+++ b/src/Song.cpp
@@ -1,4 +1,4 @@
-#include "global.h"
+#include "global.h"
#include "FontCharAliases.h"
#include "GameManager.h"
#include "RageLog.h"
@@ -34,6 +34,7 @@
#include "LyricsLoader.h"
#include "ActorUtil.h"
#include "CommonMetrics.h"
+#include "GameSoundManager.h"
#include "GameState.h"
#include
@@ -2047,6 +2048,21 @@ Song::IsMarathon() const
return m_fMusicLengthSeconds >= g_fMarathonVerSongSeconds;
}
+void
+Song::Borp()
+{
+ GameSoundManager::PlayMusicParams PlayParams;
+ PlayParams.sFile = m_sMusicFile;
+ PlayParams.pTiming = &this->m_SongTiming;
+ PlayParams.bForceLoop = true;
+ PlayParams.fStartSecond = m_fMusicSampleStartSeconds;
+ PlayParams.fLengthSeconds = GetLastSecond() + 2.f;
+ PlayParams.fFadeOutLengthSeconds = 1.f;
+ PlayParams.bAlignBeat = true;
+ PlayParams.bApplyMusicRate = true;
+ SOUND->PlayMusic(PlayParams);
+}
+
// lua start
#include "LuaBinding.h"
@@ -2468,13 +2484,17 @@ class LunaSong : public Luna
p->ReloadFromSongDir();
COMMON_RETURN_SELF;
}
-
static int GetOrTryAtLeastToGetSimfileAuthor(T* p, lua_State* L)
{
lua_pushstring(L, p->GetOrTryAtLeastToGetSimfileAuthor());
return 1;
}
-
+ static int Borp(T* p, lua_State* L)
+ {
+ p->Borp();
+ return 0;
+ }
+
LunaSong()
{
ADD_METHOD(GetDisplayFullTitle);
@@ -2543,6 +2563,7 @@ class LunaSong : public Luna
ADD_METHOD(GetPreviewVidPath);
ADD_METHOD(GetPreviewMusicPath);
ADD_METHOD(ReloadFromSongDir);
+ ADD_METHOD(Borp);
}
};
diff --git a/src/Song.h b/src/Song.h
index f87ebfd402..f7205ece4c 100644
--- a/src/Song.h
+++ b/src/Song.h
@@ -1,4 +1,4 @@
-#ifndef SONG_H
+#ifndef SONG_H
#define SONG_H
#include "Difficulty.h"
@@ -438,6 +438,9 @@ class Song
bool IsLong() const;
bool IsMarathon() const;
+ // plays music for chart preview and is available to lua -mina
+ void Borp();
+
bool SongCompleteForStyle(const Style* st) const;
bool HasStepsType(StepsType st) const;
bool HasStepsTypeAndDifficulty(StepsType st, Difficulty dc) const;
From a47dc0a35b4aacf1b12ab03f44fb49a65806d990 Mon Sep 17 00:00:00 2001
From: Nicolas
Date: Sat, 24 Nov 2018 23:37:14 -0300
Subject: [PATCH 028/320] Fix ettmulti offsetplot
---
Themes/Til Death/BGAnimations/offsetplot.lua | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/offsetplot.lua b/Themes/Til Death/BGAnimations/offsetplot.lua
index eb95cc6824..0d74f6015c 100644
--- a/Themes/Til Death/BGAnimations/offsetplot.lua
+++ b/Themes/Til Death/BGAnimations/offsetplot.lua
@@ -32,7 +32,9 @@ local handspecific = false
local left = false
local function fitX(x) -- Scale time values to fit within plot width.
- if finalSecond == 0 then return 0 end
+ if finalSecond == 0 then
+ return 0
+ end
return x / finalSecond * plotWidth - plotWidth / 2
end
@@ -46,16 +48,15 @@ local o =
self:xy(plotX, plotY)
-- being explicit about the logic since atm these are the only 2 cases we handle
- if SCREENMAN:GetTopScreen():GetName() == "ScreenEvaluationNormal" then -- default case, all data is in pss and no disk load is required
+ local name = SCREENMAN:GetTopScreen():GetName()
+ if name == "ScreenEvaluationNormal" or name == "ScreenNetEvaluation" then -- default case, all data is in pss and no disk load is required
local pss = STATSMAN:GetCurStageStats():GetPlayerStageStats(PLAYER_1)
dvt = pss:GetOffsetVector()
nrt = pss:GetNoteRowVector()
ctt = pss:GetTrackVector() -- column information for each offset
ntt = pss:GetTapNoteTypeVector() -- notetype information (we use this to handle mine hits differently- currently that means not displaying them)
pss:UnloadReplayData() -- force unload replaydata in memory after loading it (not sure if i should allow this but i don't trust deconstructors) -mina
- end
-
- if SCREENMAN:GetTopScreen():GetName() == "ScreenScoreTabOffsetPlot" then -- loaded from scoretab not eval so we need to read from disk and adjust plot display
+ elseif name == "ScreenScoreTabOffsetPlot" then -- loaded from scoretab not eval so we need to read from disk and adjust plot display
plotWidth, plotHeight = SCREEN_WIDTH, SCREEN_WIDTH * 0.3
self:xy(SCREEN_CENTER_X, SCREEN_CENTER_Y)
textzoom = 0.5
From 8921bff33621688023b5e6b2bf861364d9c0ca70 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 22:47:56 -0500
Subject: [PATCH 029/320] actually do what
0c976a221c41693353a29218bc0c8fbac4b87777 was meant to
this alters the condition that ignores queued music if it's the same as the currently playing music, seeing as there's no way to access the params for playing without changing the currently playing music, waiting for the updates to finish setting properly, then changing the music back to what we originally wanted to play, and given that for whatever reason this breaks completely when using actual song timing, the condition now requires the songtiming for the queued musictoplay to be not null in order to ignore the playmusic request
---
.../wifeTwirl.lua | 2 +-
src/GameSoundManager.cpp | 3 ++-
src/Song.cpp | 20 +++++++++++++++----
3 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index bd50bbc829..4b00bb169a 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -114,7 +114,6 @@ local function toggleNoteField()
return end
if song then
- song:Borp()
if mcbootlarder:GetVisible() then
mcbootlarder:visible(false)
mcbootlarder:GetChild("NoteField"):visible(false)
@@ -122,6 +121,7 @@ local function toggleNoteField()
else
mcbootlarder:visible(true)
mcbootlarder:GetChild("NoteField"):visible(true)
+ song:Borp()
MESSAGEMAN:Broadcast("ChartPreviewOn")
end
end
diff --git a/src/GameSoundManager.cpp b/src/GameSoundManager.cpp
index 3a172b1c6d..975dc4a21b 100644
--- a/src/GameSoundManager.cpp
+++ b/src/GameSoundManager.cpp
@@ -104,7 +104,8 @@ StartMusic(MusicToPlay& ToPlay)
{
LockMutex L(*g_Mutex);
if (g_Playing->m_Music->IsPlaying() &&
- g_Playing->m_Music->GetLoadedFilePath().EqualsNoCase(ToPlay.m_sFile))
+ g_Playing->m_Music->GetLoadedFilePath().EqualsNoCase(ToPlay.m_sFile) &&
+ ToPlay.HasTiming)
return;
/* We're changing or stopping the music. If we were dimming, reset. */
diff --git a/src/Song.cpp b/src/Song.cpp
index e524fb64e8..d9f2753279 100644
--- a/src/Song.cpp
+++ b/src/Song.cpp
@@ -2052,15 +2052,27 @@ void
Song::Borp()
{
GameSoundManager::PlayMusicParams PlayParams;
- PlayParams.sFile = m_sMusicFile;
- PlayParams.pTiming = &this->m_SongTiming;
+ PlayParams.sFile = GetMusicPath();
+ PlayParams.pTiming = nullptr;
PlayParams.bForceLoop = true;
PlayParams.fStartSecond = m_fMusicSampleStartSeconds;
- PlayParams.fLengthSeconds = GetLastSecond() + 2.f;
+ PlayParams.fLengthSeconds = GetLastSecond() - m_fMusicSampleStartSeconds + 2.f;
PlayParams.fFadeOutLengthSeconds = 1.f;
PlayParams.bAlignBeat = true;
PlayParams.bApplyMusicRate = true;
- SOUND->PlayMusic(PlayParams);
+
+ GameSoundManager::PlayMusicParams FallbackMusic;
+ FallbackMusic.sFile = GetMusicPath();
+ FallbackMusic.fFadeInLengthSeconds = 1.f;
+ FallbackMusic.bAlignBeat = true;
+
+ if (PlayParams.fLengthSeconds <
+ 3.f) { // if the songpreview is after the last note
+ PlayParams.fStartSecond =
+ 5.f; // chartpreview wont play, just set it near the start -mina
+ PlayParams.fLengthSeconds = GetLastSecond() + 2.f;
+ }
+ SOUND->PlayMusic(PlayParams, FallbackMusic);
}
// lua start
From e5dbf4a8ff38e0c82c3c5d36382eee3f6338155a Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 23:44:28 -0500
Subject: [PATCH 030/320] borp it
---
.../BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index 4b00bb169a..6c284fa9c6 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -37,6 +37,7 @@ local t =
mcbootlarder:visible(true)
mcbootlarder:GetChild("NoteField"):visible(true)
MESSAGEMAN:Broadcast("ChartPreviewOn")
+ song:Borp()
heyiwasusingthat = false
end
self:queuecommand("On")
From f9a0e1f95ea1638eeeb1a875ca32b193a8c8d335 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 23:44:42 -0500
Subject: [PATCH 031/320] cd graph clamp should go to 3x
---
src/Steps.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Steps.cpp b/src/Steps.cpp
index d6bb4b65a4..f1c738e715 100644
--- a/src/Steps.cpp
+++ b/src/Steps.cpp
@@ -903,7 +903,7 @@ class LunaSteps : public Luna
static int GetCDGraphVectors(T* p, lua_State* L)
{
float rate = FArg(1);
- CLAMP(rate, 1.f, 2.f);
+ CLAMP(rate, 1.f, 3.f);
auto nd = p->GetNoteData();
if (nd.IsEmpty())
return 0;
From 584f2a8be5d9c83eea0d8f9844c980f717b5e3e7 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sat, 24 Nov 2018 23:58:37 -0500
Subject: [PATCH 032/320] werwerwerwerwerwerwer's birthday
---
src/NoteField.cpp | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/NoteField.cpp b/src/NoteField.cpp
index 6c852ad1c6..a5d9892dbd 100644
--- a/src/NoteField.cpp
+++ b/src/NoteField.cpp
@@ -361,6 +361,11 @@ NoteField::Update(float fDeltaTime)
{
if (!this->GetVisible())
return;
+ if (!GAMESTATE->m_pCurSong) {
+ this->DeleteAllChildren();
+ return;
+ }
+
if (m_bFirstUpdate) {
m_pCurDisplay->m_ReceptorArrowRow.PlayCommand("On");
}
@@ -824,6 +829,11 @@ NoteField::CalcPixelsBeforeAndAfterTargets()
void
NoteField::DrawPrimitives()
{
+ if (!GAMESTATE->m_pCurSong) {
+ this->DeleteAllChildren();
+ return;
+ }
+
// LOG->Trace( "NoteField::DrawPrimitives()" );
// This should be filled in on the first update.
From 7417ba5123adde140506124f4a477e8b349c8b3e Mon Sep 17 00:00:00 2001
From: poco0317
Date: Sat, 24 Nov 2018 23:12:20 -0600
Subject: [PATCH 033/320] Add replay data utility for calculating radar values
---
src/PlayerAI.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++
src/PlayerAI.h | 2 ++
2 files changed, 89 insertions(+)
diff --git a/src/PlayerAI.cpp b/src/PlayerAI.cpp
index acc9a25557..8b3c2f925e 100644
--- a/src/PlayerAI.cpp
+++ b/src/PlayerAI.cpp
@@ -5,6 +5,7 @@
#include "PlayerAI.h"
#include "PlayerState.h"
#include "RageUtil.h"
+#include "RadarValues.h"
#define AI_PATH "Data/AI.ini"
@@ -492,6 +493,92 @@ PlayerAI::GetTapNoteOffsetForReplay(TapNote* pTN, int noteRow, int col)
return -1.f; // data missing or invalid, give them a miss
}
+void
+PlayerAI::CalculateRadarValuesForReplay(RadarValues& rv, RadarValues& possibleRV)
+{
+ // We will do this thoroughly just in case someone decides to use the other
+ // categories we don't currently use
+ int tapsHit = 0;
+ int jumpsHit = 0;
+ int handsHit = 0;
+ int holdsHeld = possibleRV[RadarCategory_Holds];
+ int rollsHeld = possibleRV[RadarCategory_Rolls];
+ int liftsHit = 0;
+ int fakes = possibleRV[RadarCategory_Fakes];
+ int totalNotesHit = 0;
+ int minesMissed = possibleRV[RadarCategory_Mines];
+
+ // For every row recorded...
+ for (auto& row : m_ReplayTapMap)
+ {
+ int tapsOnThisRow = 0;
+ // For every tap on these rows...
+ for (TapReplayResult& trr : row.second)
+ {
+ if (trr.type == TapNoteType_Fake)
+ {
+ fakes--;
+ continue;
+ }
+ if (trr.type == TapNoteType_Mine)
+ {
+ minesMissed--;
+ continue;
+ }
+ if (trr.type == TapNoteType_Lift)
+ {
+ liftsHit++;
+ continue;
+ }
+ tapsOnThisRow++;
+ if (trr.type == TapNoteType_Tap || trr.type == TapNoteType_HoldHead)
+ {
+ totalNotesHit++;
+ tapsHit++;
+ if (tapsOnThisRow == 2)
+ {
+ jumpsHit++;
+ }
+ else if (tapsOnThisRow >= 3)
+ {
+ handsHit++;
+ }
+ continue;
+ }
+ }
+ }
+
+ // For every hold recorded...
+ for (auto& row : m_ReplayHoldMap)
+ {
+ // For every hold on this row...
+ for (HoldReplayResult& hrr : row.second)
+ {
+ if (hrr.subType == TapNoteSubType_Hold)
+ {
+ holdsHeld--;
+ continue;
+ }
+ else if (hrr.subType == TapNoteSubType_Roll)
+ {
+ rollsHeld--;
+ continue;
+ }
+ }
+ }
+
+ // lol just set them
+ rv[RadarCategory_TapsAndHolds] = tapsHit;
+ rv[RadarCategory_Jumps] = jumpsHit;
+ rv[RadarCategory_Holds] = holdsHeld;
+ rv[RadarCategory_Mines] = minesMissed;
+ rv[RadarCategory_Hands] = handsHit;
+ rv[RadarCategory_Rolls] = rollsHeld;
+ rv[RadarCategory_Lifts] = liftsHit;
+ rv[RadarCategory_Fakes] = fakes;
+ rv[RadarCategory_Notes] = totalNotesHit;
+}
+
/*
* (c) 2003-2004 Chris Danford
* All rights reserved.
diff --git a/src/PlayerAI.h b/src/PlayerAI.h
index 27d3ab384e..6299320f96 100644
--- a/src/PlayerAI.h
+++ b/src/PlayerAI.h
@@ -63,6 +63,8 @@ class PlayerAI
static int GetAdjustedRowFromUnadjustedCoordinates(int row, int col);
// Remove a given Tap from the fallback and Full replay data vectors
static void RemoveTapFromVectors(int row, int col);
+ // Go through the replay data to fill out the radar values for the eval screen
+ static void CalculateRadarValuesForReplay(RadarValues& rv, RadarValues& possibleRV);
};
#endif
From 38481fc81c2cb1c9ebdfb30dfd09a1fded118074 Mon Sep 17 00:00:00 2001
From: poco0317
Date: Sat, 24 Nov 2018 23:12:34 -0600
Subject: [PATCH 034/320] Fix unloaded hold replay vector
---
src/HighScore.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/HighScore.cpp b/src/HighScore.cpp
index 14bdfe4939..226609e549 100644
--- a/src/HighScore.cpp
+++ b/src/HighScore.cpp
@@ -892,6 +892,7 @@ HighScore::LoadReplayDataFull()
SetOffsetVector(vOffsetVector);
SetTrackVector(vTrackVector);
SetTapNoteTypeVector(vTapNoteTypeVector);
+ SetHoldReplayDataVector(vHoldReplayDataVector);
m_Impl->ReplayType = 2;
LOG->Trace("Loaded replay data at %s", path.c_str());
From f59b2caa1bb08eaa203c47646f8d66a5f6b05f32 Mon Sep 17 00:00:00 2001
From: poco0317
Date: Sat, 24 Nov 2018 23:14:27 -0600
Subject: [PATCH 035/320] Fix inconsistent judge conversions in replay eval
screen
---
src/ScreenGameplay.cpp | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp
index 4782c45c8d..699f799be9 100644
--- a/src/ScreenGameplay.cpp
+++ b/src/ScreenGameplay.cpp
@@ -2231,6 +2231,19 @@ ScreenGameplay::SaveStats()
NoteDataWithScoring::GetActualRadarValues(nd, pss, fMusicLen, rv);
pss.m_radarActual += rv;
GAMESTATE->SetProcessedTimingData(NULL);
+ }
+ if (GamePreferences::m_AutoPlay.Get() == PC_REPLAY) {
+ // We need to replace the newly created replay data with the actual old
+ // data Because to keep consistently lazy practices, we can just hack
+ // things together instead of fixing the real issue -poco
+ // (doing this fixes a lot of issues in the eval screen)
+ PlayerStageStats* pss = m_vPlayerInfo[PLAYER_1].GetPlayerStageStats();
+ HighScore* hs = PlayerAI::pScoreData;
+ pss->m_vHoldReplayData = hs->GetHoldReplayDataVector();
+ pss->m_vNoteRowVector = hs->GetNoteRowVector();
+ pss->m_vOffsetVector = hs->GetOffsetVector();
+ pss->m_vTapNoteTypeVector = hs->GetTapNoteTypeVector();
+ pss->m_vTrackVector = hs->GetTrackVector();
}
}
From 8c431f31b49fbd49ffadfa944bba1b693798a910 Mon Sep 17 00:00:00 2001
From: poco0317
Date: Sat, 24 Nov 2018 23:15:00 -0600
Subject: [PATCH 036/320] Calculate radar values "properly" for eval screen
viewer
---
src/ScreenSelectMusic.cpp | 49 ++++++++++++++++++++++++++-------------
1 file changed, 33 insertions(+), 16 deletions(-)
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index 52708bb11c..0d6a33fb3c 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -42,7 +42,8 @@
#include "PlayerAI.h"
#include "PlayerOptions.h"
#include "NoteData.h"
-#include "Player.h"
+#include "Player.h"
+#include "NoteDataUtil.h"
static const char* SelectionStateNames[] = { "SelectingSong",
"SelectingSteps",
@@ -1819,21 +1820,37 @@ class LunaScreenSelectMusic : public Luna
// construct the current stage stats and stuff to the best of our
// ability
- StageStats ss;
- ss.Init();
- auto score = SCOREMAN->GetMostRecentScore();
- score->LoadReplayData();
- auto& pss = ss.m_player[0];
- pss.m_HighScore = *score;
- pss.CurWifeScore = score->GetWifeScore();
- pss.m_fWifeScore = score->GetWifeScore();
- pss.m_vNoteRowVector = score->GetNoteRowVector();
- pss.m_vOffsetVector = score->GetOffsetVector();
- pss.m_vTapNoteTypeVector = score->GetTapNoteTypeVector();
- pss.m_vTrackVector = score->GetTrackVector();
- score->UnloadReplayData();
- pss.m_iSongsPassed = 1;
- pss.m_iSongsPlayed = 1;
+ StageStats ss;
+ RadarValues rv;
+ NoteData nd;
+ Steps* steps = GAMESTATE->m_pCurSteps[PLAYER_1];
+ steps->GetNoteData(nd);
+ float songlength = GAMESTATE->m_pCurSong->m_fMusicLengthSeconds;
+ ss.Init();
+ auto score = SCOREMAN->GetMostRecentScore();
+ score->LoadReplayData();
+ PlayerAI::SetScoreData(score);
+
+ auto& pss = ss.m_player[0];
+ pss.m_HighScore = *score;
+ pss.CurWifeScore = score->GetWifeScore();
+ pss.m_fWifeScore = score->GetWifeScore();
+ pss.m_vNoteRowVector = score->GetNoteRowVector();
+ pss.m_vOffsetVector = score->GetOffsetVector();
+ pss.m_vTapNoteTypeVector = score->GetTapNoteTypeVector();
+ pss.m_vTrackVector = score->GetTrackVector();
+ // score->UnloadReplayData();
+ pss.m_iSongsPassed = 1;
+ pss.m_iSongsPlayed = 1;
+ GAMESTATE->SetProcessedTimingData(
+ GAMESTATE->m_pCurSteps[PLAYER_1]->GetTimingData());
+ NoteDataUtil::CalculateRadarValues(nd, songlength, rv);
+ pss.m_radarPossible += rv;
+ RadarValues realRV;
+ PlayerAI::CalculateRadarValuesForReplay(realRV, rv);
+ score->SetRadarValues(realRV);
+ pss.m_radarActual += realRV;
+ GAMESTATE->SetProcessedTimingData(NULL);
pss.everusedautoplay = true;
for (int i = TNS_Miss; i < NUM_TapNoteScore; i++) {
pss.m_iTapNoteScores[i] = score->GetTapNoteScore((TapNoteScore)i);
From a19738c6575d949ba8c202e297b0d9da96b79c5a Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 01:45:52 -0500
Subject: [PATCH 037/320] screen mines out of offsetvector when grabbing from
pss
---
src/PlayerStageStats.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/PlayerStageStats.cpp b/src/PlayerStageStats.cpp
index e0dbc34518..ec2028ae78 100644
--- a/src/PlayerStageStats.cpp
+++ b/src/PlayerStageStats.cpp
@@ -1037,9 +1037,12 @@ LuaFunction(GetGradeFromPercent, GetGradeFromPercent(FArg(1)))
// Convert to MS so lua doesn't have to
static int GetOffsetVector(T* p, lua_State* L)
{
- vector doot = p->m_vOffsetVector;
- for (size_t i = 0; i < doot.size(); ++i)
- doot[i] = doot[i] * 1000;
+ auto& offs = p->m_vOffsetVector;
+ auto& type = p->m_vTapNoteTypeVector;
+ vector doot;
+ for (size_t i = 0; i < offs.size(); ++i)
+ if (type[i] != TapNoteType_Mine)
+ doot.emplace_back(offs[i] * 1000);
LuaHelpers::CreateTableFromArray(doot, L);
return 1;
}
From a4a316bbf09e5a186de4b74e8a3120e314c9e8e7 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 01:46:10 -0500
Subject: [PATCH 038/320] only pop offsets during replays if cc is off
---
src/PlayerAI.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/PlayerAI.cpp b/src/PlayerAI.cpp
index 8b3c2f925e..5cbe40faae 100644
--- a/src/PlayerAI.cpp
+++ b/src/PlayerAI.cpp
@@ -455,9 +455,12 @@ PlayerAI::GetTapNoteOffsetForReplay(TapNote* pTN, int noteRow, int col)
// this is done to be able to judge simultaneous taps differently
// due to CC Off this results in possibly incorrect precise per tap
// judges, but the correct judgement ends up being made overall.
- m_ReplayTapMap[noteRow].pop_back();
- if (m_ReplayTapMap[noteRow].empty()) {
- m_ReplayTapMap.erase(noteRow);
+
+ if (!pScoreData->GetChordCohesion()) {
+ m_ReplayTapMap[noteRow].pop_back();
+ if (m_ReplayTapMap[noteRow].empty()) {
+ m_ReplayTapMap.erase(noteRow);
+ }
}
return -offset;
From b6e8bae9e5ed75732df1fea041c350cb118adca5 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 02:05:47 -0500
Subject: [PATCH 039/320] compilerwarns
---
src/PlayerAI.cpp | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/PlayerAI.cpp b/src/PlayerAI.cpp
index 5cbe40faae..d5b22f33c0 100644
--- a/src/PlayerAI.cpp
+++ b/src/PlayerAI.cpp
@@ -174,19 +174,16 @@ PlayerAI::SetScoreData(HighScore* pHighScore)
// Generate TapReplayResults to put into a vector referenced by the song row
// in a map
- for (int i = 0; i < (int)replayNoteRowVector.size(); i++) {
+ for (size_t i = 0; i < replayNoteRowVector.size(); i++) {
TapReplayResult trr;
trr.row = replayNoteRowVector[i];
trr.offset = replayOffsetVector[i];
- trr.offsetAdjustedRow = replayOffsetVector[i];
+ trr.offsetAdjustedRow = static_cast(replayOffsetVector[i]);
if (pScoreData->GetReplayType() ==
2) // 2 means that this is a Full Replay
{
trr.track = replayTrackVector[i];
trr.type = replayTapNoteTypeVector[i];
-
-
-
} else // Anything else (and we got this far without crashing) means
// it's not a Full Replay
{
From 54811f50841facbf6cace27900cb696f7865e893 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 02:29:22 -0500
Subject: [PATCH 040/320] properly gate updates on notefield and unload
notedata used by it
---
src/NoteField.cpp | 10 ++--------
src/ScreenSelectMusic.cpp | 9 ++++++++-
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/NoteField.cpp b/src/NoteField.cpp
index a5d9892dbd..ded2d3b43c 100644
--- a/src/NoteField.cpp
+++ b/src/NoteField.cpp
@@ -359,12 +359,8 @@ NoteField::InitColumnRenderers()
void
NoteField::Update(float fDeltaTime)
{
- if (!this->GetVisible())
+ if (!this->GetVisible() || !GAMESTATE->m_pCurSong)
return;
- if (!GAMESTATE->m_pCurSong) {
- this->DeleteAllChildren();
- return;
- }
if (m_bFirstUpdate) {
m_pCurDisplay->m_ReceptorArrowRow.PlayCommand("On");
@@ -829,10 +825,8 @@ NoteField::CalcPixelsBeforeAndAfterTargets()
void
NoteField::DrawPrimitives()
{
- if (!GAMESTATE->m_pCurSong) {
- this->DeleteAllChildren();
+ if (!this->GetVisible() || !GAMESTATE->m_pCurSong)
return;
- }
// LOG->Trace( "NoteField::DrawPrimitives()" );
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index 0d6a33fb3c..be4b180b91 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -1366,8 +1366,15 @@ ScreenSelectMusic::AfterMusicChange()
GAMESTATE->m_pPreferredSong = pSong;
else {
GAMESTATE->m_pCurSteps[PLAYER_1].Set(nullptr);
- if (m_pPreviewNoteField)
+ if (m_pPreviewNoteField) {
m_pPreviewNoteField->SetVisible(false);
+ // if previewnotefield is active and we are moving out of a pack
+ // into the pack list (that's what this block of code is for
+ // handling) manually call songmans cleanup function (compresses all
+ // steps); we could optimize by only compressing the pack but this
+ // is pretty fast anyway -mina
+ SONGMAN->Cleanup();
+ }
}
GAMESTATE->SetPaused(false); // hacky can see this being problematic
From decdc6698cdf781e58cf765eb6e4e9f3c32d56a1 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 02:33:35 -0500
Subject: [PATCH 041/320] this chartpreview music set is now handled by lua
---
src/ScreenSelectMusic.cpp | 25 +------------------------
1 file changed, 1 insertion(+), 24 deletions(-)
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index be4b180b91..a1902da0d6 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -1603,36 +1603,13 @@ ScreenSelectMusic::GeneratePreviewNoteField()
GAMESTATE->m_bIsChartPreviewActive = true;
- // Restart the music from the beginning for a full chart preview
-
- // (Enabling this would restart the music at its current position, but would
- // never go back to earlier sections)
- /*
- m_fSampleStartSeconds =
- SOUND->GetRageSoundPlaying()->GetPositionSeconds();
- */
- SOUND->StopMusic();
- m_sSampleMusicToPlay = song->GetMusicPath();
- m_fSampleStartSeconds = max(song->GetFirstSecond() - 4.f, -1.f);
- m_fSampleLengthSeconds =
- song->GetLastSecond() - m_fSampleStartSeconds + 2.f;
- if (m_fSampleLengthSeconds <
- 3.f) { // if the songpreview is after the last note
- m_fSampleStartSeconds =
- 5.f; // chartpreview wont play, just set it near the start -mina
- m_fSampleLengthSeconds = song->GetLastSecond() + 2.f;
- }
- g_bSampleMusicWaiting = true;
- CheckBackgroundRequests(true);
-
// Create and Render the NoteField afterwards
// It is done in this order so we don't see it before the music changes.
m_pPreviewNoteField = new NoteField;
m_pPreviewNoteField->SetName(
"NoteField"); // Use this to get the ActorFrame from the Screen Children
- m_pPreviewNoteField->Init(GAMESTATE->m_pPlayerState[PLAYER_1],
- 100);
+ m_pPreviewNoteField->Init(GAMESTATE->m_pPlayerState[PLAYER_1], 100);
m_pPreviewNoteField->Load(&m_PreviewNoteData, 0, 800);
}
From 23022b8613791885beac56eba46ba4ed03feca4b Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:01:30 -0500
Subject: [PATCH 042/320] hand over more chartpreview music control to lua
---
.../wifeTwirl.lua | 3 ++
src/ScreenSelectMusic.cpp | 28 +++++++------------
2 files changed, 13 insertions(+), 18 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index 6c284fa9c6..b86b0c429d 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -31,6 +31,9 @@ local t =
if song ~= bong then
song = bong
self:queuecommand("MortyFarts")
+ if noteField and mcbootlarder:GetChild("NoteField"):GetVisible() and song then
+ song:Borp()
+ end
end
if getTabIndex() == 0 then
if heyiwasusingthat and GAMESTATE:GetCurrentSong() and noteField then -- these can prolly be wrapped better too -mina
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index a1902da0d6..81de78fb75 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -316,9 +316,9 @@ ScreenSelectMusic::CheckBackgroundRequests(bool bForce)
// heavy duty chart specific operations can be delayed when scrolling (chord
// density graph, possibly chart leaderboards, etc) -mina
- // in theory the notedata load for chartpreviews could go here however a delay
- // might make it weird when swapping between difficulties to compare sections
- // for which you would want instantaneous action -mina
+ // in theory the notedata load for chartpreviews could go here however a
+ // delay might make it weird when swapping between difficulties to compare
+ // sections for which you would want instantaneous action -mina
if (delayedchartupdatewaiting) {
if (g_ScreenStartedLoadingAt
.Ago() > // not sure if i need the "moving fast" check -mina
@@ -365,18 +365,8 @@ ScreenSelectMusic::CheckBackgroundRequests(bool bForce)
// the notefield is not visible when the
// previewmusic starts i.e. when the general tab
// is not active when a song is switched -mina
- auto song = GAMESTATE->m_pCurSong;
- if (song == nullptr)
- return;
-
- PlayParams.sFile = song->GetMusicPath();
- PlayParams.fLengthSeconds =
- song->GetLastSecond() - m_fSampleStartSeconds + 2.f;
- if (PlayParams.fLengthSeconds < 3.f) { // if the songpreview is after the last note
- PlayParams.fStartSecond = 5.f; // chartpreview wont play, just set it near the start -mina
- PlayParams.fLengthSeconds = song->GetLastSecond() + 2.f;
- }
-
+ return;
+ MESSAGEMAN->Broadcast("PlayingSampleMusic");
}
SOUND->PlayMusic(PlayParams, FallbackMusic);
@@ -1003,7 +993,8 @@ ScreenSelectMusic::HandleMessage(const Message& msg)
}
m_iSelection[pn] = iSel;
- Steps* pSteps = m_vpSteps.empty() ? nullptr : m_vpSteps[m_iSelection[pn]];
+ Steps* pSteps =
+ m_vpSteps.empty() ? nullptr : m_vpSteps[m_iSelection[pn]];
GAMESTATE->m_pCurSteps[pn].Set(pSteps);
}
@@ -1287,10 +1278,11 @@ ScreenSelectMusic::AfterStepsOrTrailChange(const vector& vpns)
CLAMP(m_iSelection[pn], 0, m_vpSteps.size() - 1);
Song* pSong = GAMESTATE->m_pCurSong;
- Steps* pSteps = m_vpSteps.empty() ? nullptr : m_vpSteps[m_iSelection[pn]];
+ Steps* pSteps =
+ m_vpSteps.empty() ? nullptr : m_vpSteps[m_iSelection[pn]];
GAMESTATE->m_pCurSteps[pn].Set(pSteps);
- if (pSteps != nullptr)
+ if (pSteps != nullptr)
GAMESTATE->SetCompatibleStyle(pSteps->m_StepsType, pn);
int iScore = 0;
From 9d52f9992086f4aa3a62e39d05450d0e67c637a5 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:01:42 -0500
Subject: [PATCH 043/320] pretty sure this does nothing
---
Themes/Til Death/BGAnimations/_chartpreview.lua | 1 -
1 file changed, 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chartpreview.lua b/Themes/Til Death/BGAnimations/_chartpreview.lua
index c9e290a94e..8c0b7419fe 100644
--- a/Themes/Til Death/BGAnimations/_chartpreview.lua
+++ b/Themes/Til Death/BGAnimations/_chartpreview.lua
@@ -65,7 +65,6 @@ local t = Def.ActorFrame {
cd:visible(true):y(20) -- need to control this manually -mina
cd:GetChild("cdbg"):diffusealpha(0) -- we want to use our position background for draw order stuff -mina
cd:queuecommand("GraphUpdate") -- first graph will be empty if we dont force this on initial creation
- self:queuecommand("PlayingSampleMusic")
end,
Def.Quad {
Name = "BG",
From 29eafa351e37e1a3188183807ddc53a7b596a876 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:02:11 -0500
Subject: [PATCH 044/320] "properly" gate visibility req for cdgraph updating
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index 8dce875656..dfa66138a3 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -88,7 +88,11 @@ local t = Def.ActorFrame {
self:SetUpdateFunction(textmover)
cdg = self
end,
+ CurrentSongChangedMessageCommand = function(self)
+ self:diffusealpha(0)
+ end,
DelayedChartUpdateMessageCommand = function(self)
+ self:diffusealpha(1)
self:queuecommand("GraphUpdate")
end,
CurrentRateChangedMessageCommand = function(self)
@@ -108,7 +112,7 @@ t[#t+1] =
Def.ActorMultiVertex {
Name = "CDGraphDrawer",
GraphUpdateCommand = function(self)
- if self:GetVisible() then
+ if self:GetParent():GetVisible() then
updateGraphMultiVertex(cdg, self)
end
end
From 9036e6d52386d60adad079e17d8ab6f372a5851f Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:11:02 -0500
Subject: [PATCH 045/320] only cool people could get this bug but now they will
never know
---
.../BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index b86b0c429d..0b2651b165 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -115,6 +115,7 @@ local function toggleNoteField()
if usingreverse then
mcbootlarder:GetChild("NoteField"):y(prevY*1.5 + prevrevY)
end
+ song:Borp() -- catches a dumb bug that isn't worth explaining -mina
return end
if song then
From d0f97769e87d181a493816ec7bd8625d622795e2 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:11:15 -0500
Subject: [PATCH 046/320] fix another missed update with scores... need to
refactor
---
.../BGAnimations/ScreenSelectMusic decorations/score.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
index c344eea749..3704a25d86 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
@@ -179,6 +179,7 @@ local ret =
end
end,
NestedTabChangedMessageCommand = function(self)
+ self:queuecommand("Set")
updateLeaderBoardForCurrentChart()
end,
CurrentStepsP1ChangedMessageCommand = function(self)
From c46ff5fed27f3c22c2d541f5c04bd0fcab5f126f Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:17:35 -0500
Subject: [PATCH 047/320] cd graph can fade in to look slightly less weird
---
Themes/Til Death/BGAnimations/_chorddensitygraph.lua | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
index dfa66138a3..87dfb16a36 100644
--- a/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
+++ b/Themes/Til Death/BGAnimations/_chorddensitygraph.lua
@@ -92,7 +92,6 @@ local t = Def.ActorFrame {
self:diffusealpha(0)
end,
DelayedChartUpdateMessageCommand = function(self)
- self:diffusealpha(1)
self:queuecommand("GraphUpdate")
end,
CurrentRateChangedMessageCommand = function(self)
@@ -114,6 +113,8 @@ t[#t+1] =
GraphUpdateCommand = function(self)
if self:GetParent():GetVisible() then
updateGraphMultiVertex(cdg, self)
+ self:GetParent():linear(0.3)
+ self:GetParent():diffusealpha(1)
end
end
}
From 343c13db72c3f7b9f93ad28ede5a82c8893d0a56 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:30:50 -0500
Subject: [PATCH 048/320] handled via lua now
---
src/ScreenSelectMusic.cpp | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index 81de78fb75..02b9940791 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -355,23 +355,8 @@ ScreenSelectMusic::CheckBackgroundRequests(bool bForce)
FallbackMusic.fFadeInLengthSeconds =
SAMPLE_MUSIC_FALLBACK_FADE_IN_SECONDS;
FallbackMusic.bAlignBeat = ALIGN_MUSIC_BEATS;
-
- // update the chartpreview music when switching songs -mina
- if (m_pPreviewNoteField != nullptr &&
- m_pPreviewNoteField->GetVisible() &&
- m_pPreviewNoteField->GetParent()
- ->GetVisible()) { // this kinda makes a lot of assumptions atm and
- // stops the full preview music from playing if
- // the notefield is not visible when the
- // previewmusic starts i.e. when the general tab
- // is not active when a song is switched -mina
- return;
- MESSAGEMAN->Broadcast("PlayingSampleMusic");
- }
-
SOUND->PlayMusic(PlayParams, FallbackMusic);
MESSAGEMAN->Broadcast("PlayingSampleMusic");
- // DLMAN->RequestChartLeaderBoard(GAMESTATE->m_pCurSteps[PLAYER_1]->GetChartKey());
}
}
From a64ee8b1d0ad036957c55642f45f7a1f03f0849f Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:31:03 -0500
Subject: [PATCH 049/320] move msd tab cdgraph initialization
---
.../BGAnimations/ScreenSelectMusic decorations/msd.lua | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/msd.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/msd.lua
index af608f95af..ae4571bf0f 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/msd.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/msd.lua
@@ -23,7 +23,6 @@ local t =
Def.ActorFrame {
BeginCommand = function(self)
cd = self:GetChild("ChordDensityGraph")
- cd:playcommand("GraphUpdate") -- force the first update before setting visible(false) (so it's not empty when switching to the tab) -mina
cd:xy(frameX + offsetX, frameY + 140):visible(false)
self:queuecommand("Set"):visible(false)
end,
@@ -55,6 +54,7 @@ local t =
if song and steps then
cd:visible(true)
+ cd:queuecommand("GraphUpdate")
else
cd:visible(false)
end
From f88caa2a67a9fac5181d94e1d5aa2c7fea67a060 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 03:37:24 -0500
Subject: [PATCH 050/320] only borp when you most must
---
.../ScreenSelectMusic decorations/wifeTwirl.lua | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
index 0b2651b165..25af56e8fb 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/wifeTwirl.lua
@@ -12,6 +12,7 @@ local prevX = capWideScale(get43size(98), 98)
local usingreverse = GAMESTATE:GetPlayerState(PLAYER_1):GetCurrentPlayerOptions():UsingReverse()
local prevY = 55
local prevrevY = 208
+local boolthatgetssettotrueonsongchangebutonlyifonatabthatisntthisone = false
local update = false
local t =
@@ -22,6 +23,11 @@ local t =
OnCommand = function(self)
self:bouncebegin(0.2):xy(0, 0):diffusealpha(1)
end,
+ CurrentSongChanged = function()
+ if getTabIndex() ~= 0 then
+ boolthatgetssettotrueonsongchangebutonlyifonatabthatisntthisone = true
+ end
+ end,
MintyFreshCommand = function(self)
self:finishtweening()
local bong = GAMESTATE:GetCurrentSong()
@@ -40,7 +46,9 @@ local t =
mcbootlarder:visible(true)
mcbootlarder:GetChild("NoteField"):visible(true)
MESSAGEMAN:Broadcast("ChartPreviewOn")
- song:Borp()
+ if boolthatgetssettotrueonsongchangebutonlyifonatabthatisntthisone then
+ song:Borp()
+ end
heyiwasusingthat = false
end
self:queuecommand("On")
From aad0c4ed9685175171dfdb93bf6f4ee9f9f676a8 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 04:37:59 -0500
Subject: [PATCH 051/320] uncollapsed online scores with current rate now
respond to rate changes
using a completely idiotic solution to remind me to refactor and streamline the scripts fallback function
---
.../ScreenSelectMusic decorations/score.lua | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
index 3704a25d86..614eab9344 100644
--- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
+++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua
@@ -186,6 +186,33 @@ local ret =
self:queuecommand("Set")
updateLeaderBoardForCurrentChart()
end,
+ CodeMessageCommand = function(self, params) -- this is intentionally bad to remind me to fix other things that are bad -mina
+ if ((getTabIndex() == 2 and nestedTab == 2) and not collapsed) and DLMAN:GetCurrentRateFilter() then
+ local rate = getCurRateValue()
+ if params.Name == "PrevScore" and rate < 2.95 then
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Preferred"):MusicRate(rate + 0.1)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Song"):MusicRate(rate + 0.1)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Current"):MusicRate(rate + 0.1)
+ MESSAGEMAN:Broadcast("CurrentRateChanged")
+ elseif params.Name == "NextScore" and rate > 0.75 then
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Preferred"):MusicRate(rate - 0.1)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Song"):MusicRate(rate - 0.1)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Current"):MusicRate(rate - 0.1)
+ MESSAGEMAN:Broadcast("CurrentRateChanged")
+ end
+ if params.Name == "PrevRate" and rate < 3 then
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Preferred"):MusicRate(rate + 0.05)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Song"):MusicRate(rate + 0.05)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Current"):MusicRate(rate + 0.05)
+ MESSAGEMAN:Broadcast("CurrentRateChanged")
+ elseif params.Name == "NextRate" and rate > 0.7 then
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Preferred"):MusicRate(rate - 0.05)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Song"):MusicRate(rate - 0.05)
+ GAMESTATE:GetSongOptionsObject("ModsLevel_Current"):MusicRate(rate - 0.05)
+ MESSAGEMAN:Broadcast("CurrentRateChanged")
+ end
+ end
+ end,
CurrentRateChangedMessageCommand = function(self)
if ((getTabIndex() == 2 and nestedTab == 2) or collapsed) and DLMAN:GetCurrentRateFilter() then
moped:queuecommand("ChartLeaderboardUpdate")
From 37ef602d5a6dfe2d4a071a53a1c8fb64f11ecc5e Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 18:19:04 -0500
Subject: [PATCH 052/320] put back gameplay percent display background
---
.../ScreenGameplay overlay/WifeJudgmentSpotting.lua | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua b/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
index a84b1481fe..6a0e392691 100644
--- a/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
+++ b/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
@@ -347,6 +347,11 @@ local cp =
end
self:zoom(MovableValues.DisplayPercentZoom):x(MovableValues.DisplayPercentX):y(MovableValues.DisplayPercentY)
end,
+ Def.Quad {
+ InitCommand = function(self)
+ self:zoomto(60, 13):diffuse(color("0,0,0,0.4")):halign(1):valign(0)
+ end
+ },
-- Displays your current percentage score
LoadFont("Common Large") .. {
Name = "DisplayPercent",
From 1a8089609cf3cfd612c0e97512756fbc4e7a7e39 Mon Sep 17 00:00:00 2001
From: "born a rick, raised a morty, died a jerry"
Date: Sun, 25 Nov 2018 18:24:14 -0500
Subject: [PATCH 053/320] remove commented out restart button code
---
.../WifeJudgmentSpotting.lua | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua b/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
index 6a0e392691..f5ac00013c 100644
--- a/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
+++ b/Themes/Til Death/BGAnimations/ScreenGameplay overlay/WifeJudgmentSpotting.lua
@@ -135,15 +135,6 @@ local enabledJudgeCounter = playerConfig:get_data(pn_to_profile_slot(PLAYER_1)).
local leaderboardEnabled = playerConfig:get_data(pn_to_profile_slot(PLAYER_1)).leaderboardEnabled and DLMAN:IsLoggedIn()
local isReplay = GAMESTATE:GetPlayerState(PLAYER_1):GetPlayerController() == "PlayerController_Replay"
--- restart button (MOVED OUT OF THEME IN FAVOR OF REMAPPING)
---[[
-local function froot(loop)
- if loop.DeviceInput.button == "DeviceButton_`" then
- SCREENMAN:GetTopScreen():SetPrevScreenName("ScreenStageInformation"):begin_backing_out()
- end
-end
-]]
-
local function arbitraryErrorBarValue(value)
errorBarFrameWidth = capWideScale(get43size(value), value)
wscale = errorBarFrameWidth / 180
@@ -173,9 +164,6 @@ local t =
local endTime = os.time() + GetPlayableTime()
GAMESTATE:UpdateDiscordPresence(largeImageTooltip, detail, state, endTime)
- --[[if SCREENMAN:GetTopScreen():GetName() == "ScreenGameplay" then
- SCREENMAN:GetTopScreen():AddInputCallback(froot)
- end]]
screen = SCREENMAN:GetTopScreen()
usingReverse = GAMESTATE:GetPlayerState(PLAYER_1):GetCurrentPlayerOptions():UsingReverse()
Notefield = screen:GetChild("PlayerP1"):GetChild("NoteField")
@@ -360,7 +348,7 @@ local cp =
end,
OnCommand = function(self)
if allowedCustomization then
- self:settextf("%05.2f%%", -10000)
+ self:settextf("%05.2f%%", -10000)
setBorderAlignment(self:GetParent():GetChild("Border"), 1, 0)
setBorderToText(self:GetParent():GetChild("Border"), self)
end
From aff1e92844be94f60bb2ea15bd7015873ec9a307 Mon Sep 17 00:00:00 2001
From: Nicolas
Date: Sun, 25 Nov 2018 22:59:05 -0300
Subject: [PATCH 054/320] Move vanilla SM docs to legacy folder and add
building instructions
---
Docs/Building-Docs.md | 12 +
Docs/Building.md | 195 +
Docs/Contributing.md | 53 +
Docs/{ => legacy}/Changelog_SSCformat.txt | 0
Docs/{ => legacy}/Changelog_language.txt | 0
Docs/{ => legacy}/Changelog_sm-ssc.txt | 0
Docs/{ => legacy}/Changelog_sm5.txt | 5232 +++----
Docs/{ => legacy}/CommandLineArgs.txt | 0
Docs/{ => legacy}/Copying.MAD | 680 +-
Docs/{ => legacy}/CourseFormat.txt | 0
Docs/{ => legacy}/CustomMissionReference.txt | 0
.../Devdocs/BuildingFfmpegOnMac.txt | 0
Docs/{ => legacy}/Devdocs/CodingStyle.txt | 0
Docs/{ => legacy}/Devdocs/CompileFlags.txt | 0
Docs/{ => legacy}/Devdocs/GoldenRules.txt | 0
.../{ => legacy}/Devdocs/NegBPMsTutorial.html | 258 +-
Docs/{ => legacy}/Devdocs/SMLanProtocol.txt | 0
Docs/{ => legacy}/Devdocs/SMO_protocol-aj.txt | 0
Docs/{ => legacy}/Devdocs/SMXML.txt | 0
Docs/{ => legacy}/Devdocs/Sound Drivers.txt | 0
Docs/{ => legacy}/Devdocs/SplitTiming.txt | 192 +-
Docs/{ => legacy}/Devdocs/TextEntry.txt | 0
Docs/{ => legacy}/Devdocs/WarpNotes.txt | 0
Docs/{ => legacy}/Devdocs/ezsockets.txt | 0
.../Devdocs/interesting_sm4_commit_logs.txt | 0
.../Devdocs/negbpmtut/screen00214.jpg | Bin
.../Devdocs/negbpmtut/screen00215.jpg | Bin
.../Devdocs/negbpmtut/screen00216.jpg | Bin
.../Devdocs/negbpmtut/screen00217.jpg | Bin
.../Devdocs/negbpmtut/screen00218.jpg | Bin
.../Devdocs/negbpmtut/screen00221.jpg | Bin
.../Devdocs/possible memory leaks.txt | 0
Docs/{ => legacy}/Devdocs/rivaldata.txt | 0
Docs/{ => legacy}/Devdocs/versioning.txt | 0
Docs/{ => legacy}/KnownIssues.txt | 106 +-
Docs/{ => legacy}/Licenses.txt | 0
Docs/{ => legacy}/Luadoc/Lua.xml | 7106 +++++-----
Docs/{ => legacy}/Luadoc/Lua.xsd | 376 +-
Docs/{ => legacy}/Luadoc/Lua.xsl | 0
Docs/{ => legacy}/Luadoc/LuaDocumentation.xml | 11468 ++++++++--------
Docs/legacy/Luadoc/a.lua | 22 +
Docs/{ => legacy}/Luadoc/bgline.png | Bin
Docs/{ => legacy}/Luadoc/closed.gif | Bin
Docs/{ => legacy}/Luadoc/favicon.ico | Bin
Docs/{ => legacy}/Luadoc/open.gif | Bin
.../Mapping_keys_for_edit_mode.txt | 0
Docs/{ => legacy}/README-GUIDELINES | 60 +-
.../BMS/BM98Data_format_specification.html | 0
.../SimfileFormats/BMS/BM98FinalSecret.html | 0
.../BMS/BMS_Reading_Tutorial.rtf | 0
.../BMS/BMS_Reading_Tutorial.txt | 0
Docs/{ => legacy}/SimfileFormats/BMS/_src.txt | 0
Docs/{ => legacy}/SimfileFormats/BMS/tmp.txt | 0
Docs/{ => legacy}/SimfileFormats/DWI/DWI.txt | 0
.../SimfileFormats/DWI/readme.html | 2448 ++--
Docs/{ => legacy}/SimfileFormats/KSF/_src.txt | 0
.../SimfileFormats/KSF/ksf-format.txt | 0
.../SimfileFormats/KSF/sample.ksf | 42 +-
Docs/{ => legacy}/SimfileFormats/README | 20 +-
Docs/{ => legacy}/SimfileFormats/SDF/SDF.txt | 0
.../SimfileFormats/SDF/ssc-banner.png | Bin
.../SimfileFormats/SDF/ssc-bg.png | Bin
.../SimfileFormats/SDF/test-1bpm.sdf | Bin
Docs/{ => legacy}/SimfileFormats/SDF/test.sdf | Bin
Docs/{ => legacy}/SimfileFormats/SDF/test.sm | 0
.../SimfileFormats/dance-spec.txt | 0
Docs/{ => legacy}/SimfileFormats/misc.txt | 0
.../SimfileFormats/new format draft.txt | 0
Docs/{ => legacy}/SimfileFormats/ssc_msd5.txt | 148 +-
Docs/{ => legacy}/Stats.xml | 0
.../Examples/Example_Actors/ActorFrame.lua | 0
.../Example_Actors/ActorFrameTexture.lua | 0
.../Examples/Example_Actors/ActorScroller.lua | 0
.../Examples/Example_Actors/BitmapText.lua | 0
.../Examples/Example_Actors/Quad.lua | 0
.../Example_Actors/RollingNumbers.lua | 0
.../Examples/Example_Actors/Toasty.lua | 0
.../Example_Screens/ScreenHeartEntry.lua | 0
.../Example_Screens/ScreenMapControllers.lua | 0
.../Example_Screens/ScreenOptionsExample.ini | 0
.../ScreenSimpleExample overlay.lua | 0
.../One_Screen_Example_Theme/ThemeInfo.ini | 0
.../One_Screen_Example_Theme/metrics.ini | 0
.../One_Screen_Example_Theme/readme.txt | 0
.../Examples/OptionRowHandlerLua.lua | 0
.../Examples/anatomy_of_an_actor.lua | 0
.../Noteskin elements Reference.txt | 0
.../Themerdocs/ScreenAMVTest overlay.lua | 0
.../Themerdocs/ScreenMessages.txt | 0
.../Themerdocs/ScreenTextEntry.txt | 0
Docs/{ => legacy}/Themerdocs/ThemePrefs.txt | 0
.../Themerdocs/ThemePrefsRows.txt | 0
Docs/{ => legacy}/Themerdocs/XmlToLua.txt | 0
Docs/{ => legacy}/Themerdocs/actordef.txt | 0
.../Themerdocs/announcer_files.txt | 0
Docs/{ => legacy}/Themerdocs/calories.txt | 0
.../Themerdocs/conditional_music.txt | 0
.../{ => legacy}/Themerdocs/effect_colors.txt | 0
Docs/{ => legacy}/Themerdocs/fontini.txt | 0
Docs/{ => legacy}/Themerdocs/gamecommands.txt | 0
Docs/{ => legacy}/Themerdocs/haste.txt | 0
.../Themerdocs/included_scripts.txt | 0
Docs/{ => legacy}/Themerdocs/modslevel.txt | 0
Docs/{ => legacy}/Themerdocs/moremsg.txt | 0
Docs/{ => legacy}/Themerdocs/pause_menu.md | 0
.../Themerdocs/recommended_practices.txt | 0
.../Themerdocs/sm-ssc_themeguide.txt | 0
.../Userdocs/Keymaps_ini_format.md | 0
.../Userdocs/bgchanges_format.txt | 0
Docs/{ => legacy}/Userdocs/sm5_beginner.txt | 0
Docs/{ => legacy}/credits.txt | 364 +-
Docs/{ => legacy}/docpack.zip | Bin
Docs/{ => legacy}/license-ext/Scoring-jp.txt | 0
Docs/{ => legacy}/license-ext/readme | 0
.../license-ext/theme_lang-ja.txt | 0
.../license-ext/vlgothic/Changelog | 0
.../{ => legacy}/license-ext/vlgothic/LICENSE | 0
.../license-ext/vlgothic/LICENSE.en | 0
.../license-ext/vlgothic/LICENSE_E.mplus | 0
.../license-ext/vlgothic/LICENSE_J.mplus | 0
Docs/{ => legacy}/license-ext/vlgothic/README | 0
.../license-ext/vlgothic/README.sazanami | 0
.../license-ext/vlgothic/README_J.mplus | 0
Docs/{ => legacy}/midiman.wishlist | 48 +-
Docs/{ => legacy}/old_changelog.txt | 0
Docs/{ => legacy}/opensource_simulators.txt | 0
Docs/{ => legacy}/steps.lua | 0
Docs/{ => legacy}/versioning.txt | 0
README.md | 49 +-
129 files changed, 14587 insertions(+), 14292 deletions(-)
create mode 100644 Docs/Building-Docs.md
create mode 100644 Docs/Building.md
create mode 100644 Docs/Contributing.md
rename Docs/{ => legacy}/Changelog_SSCformat.txt (100%)
rename Docs/{ => legacy}/Changelog_language.txt (100%)
rename Docs/{ => legacy}/Changelog_sm-ssc.txt (100%)
rename Docs/{ => legacy}/Changelog_sm5.txt (97%)
rename Docs/{ => legacy}/CommandLineArgs.txt (100%)
rename Docs/{ => legacy}/Copying.MAD (98%)
rename Docs/{ => legacy}/CourseFormat.txt (100%)
rename Docs/{ => legacy}/CustomMissionReference.txt (100%)
rename Docs/{ => legacy}/Devdocs/BuildingFfmpegOnMac.txt (100%)
rename Docs/{ => legacy}/Devdocs/CodingStyle.txt (100%)
rename Docs/{ => legacy}/Devdocs/CompileFlags.txt (100%)
rename Docs/{ => legacy}/Devdocs/GoldenRules.txt (100%)
rename Docs/{ => legacy}/Devdocs/NegBPMsTutorial.html (98%)
rename Docs/{ => legacy}/Devdocs/SMLanProtocol.txt (100%)
rename Docs/{ => legacy}/Devdocs/SMO_protocol-aj.txt (100%)
rename Docs/{ => legacy}/Devdocs/SMXML.txt (100%)
rename Docs/{ => legacy}/Devdocs/Sound Drivers.txt (100%)
rename Docs/{ => legacy}/Devdocs/SplitTiming.txt (98%)
rename Docs/{ => legacy}/Devdocs/TextEntry.txt (100%)
rename Docs/{ => legacy}/Devdocs/WarpNotes.txt (100%)
rename Docs/{ => legacy}/Devdocs/ezsockets.txt (100%)
rename Docs/{ => legacy}/Devdocs/interesting_sm4_commit_logs.txt (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00214.jpg (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00215.jpg (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00216.jpg (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00217.jpg (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00218.jpg (100%)
rename Docs/{ => legacy}/Devdocs/negbpmtut/screen00221.jpg (100%)
rename Docs/{ => legacy}/Devdocs/possible memory leaks.txt (100%)
rename Docs/{ => legacy}/Devdocs/rivaldata.txt (100%)
rename Docs/{ => legacy}/Devdocs/versioning.txt (100%)
rename Docs/{ => legacy}/KnownIssues.txt (97%)
rename Docs/{ => legacy}/Licenses.txt (100%)
rename Docs/{ => legacy}/Luadoc/Lua.xml (97%)
rename Docs/{ => legacy}/Luadoc/Lua.xsd (97%)
rename Docs/{ => legacy}/Luadoc/Lua.xsl (100%)
rename Docs/{ => legacy}/Luadoc/LuaDocumentation.xml (98%)
create mode 100644 Docs/legacy/Luadoc/a.lua
rename Docs/{ => legacy}/Luadoc/bgline.png (100%)
rename Docs/{ => legacy}/Luadoc/closed.gif (100%)
rename Docs/{ => legacy}/Luadoc/favicon.ico (100%)
rename Docs/{ => legacy}/Luadoc/open.gif (100%)
rename Docs/{ => legacy}/Mapping_keys_for_edit_mode.txt (100%)
rename Docs/{ => legacy}/README-GUIDELINES (97%)
rename Docs/{ => legacy}/SimfileFormats/BMS/BM98Data_format_specification.html (100%)
rename Docs/{ => legacy}/SimfileFormats/BMS/BM98FinalSecret.html (100%)
rename Docs/{ => legacy}/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf (100%)
rename Docs/{ => legacy}/SimfileFormats/BMS/BMS_Reading_Tutorial.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/BMS/_src.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/BMS/tmp.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/DWI/DWI.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/DWI/readme.html (98%)
rename Docs/{ => legacy}/SimfileFormats/KSF/_src.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/KSF/ksf-format.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/KSF/sample.ksf (93%)
rename Docs/{ => legacy}/SimfileFormats/README (98%)
rename Docs/{ => legacy}/SimfileFormats/SDF/SDF.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/SDF/ssc-banner.png (100%)
rename Docs/{ => legacy}/SimfileFormats/SDF/ssc-bg.png (100%)
rename Docs/{ => legacy}/SimfileFormats/SDF/test-1bpm.sdf (100%)
rename Docs/{ => legacy}/SimfileFormats/SDF/test.sdf (100%)
rename Docs/{ => legacy}/SimfileFormats/SDF/test.sm (100%)
rename Docs/{ => legacy}/SimfileFormats/dance-spec.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/misc.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/new format draft.txt (100%)
rename Docs/{ => legacy}/SimfileFormats/ssc_msd5.txt (93%)
rename Docs/{ => legacy}/Stats.xml (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/ActorFrame.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/ActorFrameTexture.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/ActorScroller.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/BitmapText.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/Quad.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/RollingNumbers.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Actors/Toasty.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Screens/ScreenMapControllers.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Screens/ScreenOptionsExample.ini (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Themes/One_Screen_Example_Theme/BGAnimations/ScreenSimpleExample overlay.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Themes/One_Screen_Example_Theme/ThemeInfo.ini (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Themes/One_Screen_Example_Theme/metrics.ini (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/Example_Themes/One_Screen_Example_Theme/readme.txt (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/OptionRowHandlerLua.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Examples/anatomy_of_an_actor.lua (100%)
rename Docs/{ => legacy}/Themerdocs/Noteskin elements Reference.txt (100%)
rename Docs/{ => legacy}/Themerdocs/ScreenAMVTest overlay.lua (100%)
rename Docs/{ => legacy}/Themerdocs/ScreenMessages.txt (100%)
rename Docs/{ => legacy}/Themerdocs/ScreenTextEntry.txt (100%)
rename Docs/{ => legacy}/Themerdocs/ThemePrefs.txt (100%)
rename Docs/{ => legacy}/Themerdocs/ThemePrefsRows.txt (100%)
rename Docs/{ => legacy}/Themerdocs/XmlToLua.txt (100%)
rename Docs/{ => legacy}/Themerdocs/actordef.txt (100%)
rename Docs/{ => legacy}/Themerdocs/announcer_files.txt (100%)
rename Docs/{ => legacy}/Themerdocs/calories.txt (100%)
rename Docs/{ => legacy}/Themerdocs/conditional_music.txt (100%)
rename Docs/{ => legacy}/Themerdocs/effect_colors.txt (100%)
rename Docs/{ => legacy}/Themerdocs/fontini.txt (100%)
rename Docs/{ => legacy}/Themerdocs/gamecommands.txt (100%)
rename Docs/{ => legacy}/Themerdocs/haste.txt (100%)
rename Docs/{ => legacy}/Themerdocs/included_scripts.txt (100%)
rename Docs/{ => legacy}/Themerdocs/modslevel.txt (100%)
rename Docs/{ => legacy}/Themerdocs/moremsg.txt (100%)
rename Docs/{ => legacy}/Themerdocs/pause_menu.md (100%)
rename Docs/{ => legacy}/Themerdocs/recommended_practices.txt (100%)
rename Docs/{ => legacy}/Themerdocs/sm-ssc_themeguide.txt (100%)
rename Docs/{ => legacy}/Userdocs/Keymaps_ini_format.md (100%)
rename Docs/{ => legacy}/Userdocs/bgchanges_format.txt (100%)
rename Docs/{ => legacy}/Userdocs/sm5_beginner.txt (100%)
rename Docs/{ => legacy}/credits.txt (95%)
rename Docs/{ => legacy}/docpack.zip (100%)
rename Docs/{ => legacy}/license-ext/Scoring-jp.txt (100%)
rename Docs/{ => legacy}/license-ext/readme (100%)
rename Docs/{ => legacy}/license-ext/theme_lang-ja.txt (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/Changelog (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/LICENSE (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/LICENSE.en (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/LICENSE_E.mplus (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/LICENSE_J.mplus (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/README (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/README.sazanami (100%)
rename Docs/{ => legacy}/license-ext/vlgothic/README_J.mplus (100%)
rename Docs/{ => legacy}/midiman.wishlist (96%)
rename Docs/{ => legacy}/old_changelog.txt (100%)
rename Docs/{ => legacy}/opensource_simulators.txt (100%)
rename Docs/{ => legacy}/steps.lua (100%)
rename Docs/{ => legacy}/versioning.txt (100%)
diff --git a/Docs/Building-Docs.md b/Docs/Building-Docs.md
new file mode 100644
index 0000000000..f61a93976f
--- /dev/null
+++ b/Docs/Building-Docs.md
@@ -0,0 +1,12 @@
+## Building Documentation
+
+## Lua
+
+We're using LDoc, you can find it's documentation here: https://stevedonovan.github.io/ldoc/manual/doc.md.html
+
+To generate the docs, just run /Utils/ldoc_run.bat (Which just runs "ldoc ."). The configuration file is Utils/config.ld . It's generating docs for Themes/\_fallback/Scripts and Themes/\_fallback/Docs , and topics for Themes/\_fallback/Docs/Markdown .
+
+## C++
+
+We're using doxygen.
+Just run Utils/doxygen_run.bat . The configuration file is /Utils/doxygen_config
diff --git a/Docs/Building.md b/Docs/Building.md
new file mode 100644
index 0000000000..293d3e3f76
--- /dev/null
+++ b/Docs/Building.md
@@ -0,0 +1,195 @@
+## Building
+
+It should be noted that building Etterna on your own from the lastest commit is more likely to behave strangely(Resulting in crashes, profile wipes, etc). Do it at your own risk. It is recommended to use the installers or source files provided with every release.
+
+1. Windows
+1. Linux
+1. Mac
+
+
+
+## Windows
+
+## Dependencies(Required libraries)
+
+You will need the following:
+
+1. Visual Studio (preferably 2015) with c++ packages.
+1. CMake (You can CMake GUI if you're not comfortable with the command window)
+1. DirectX End-User Runtimes (June 2010)
+1. DirectX SDK
+1. Microsoft Visual C++ x86 Redistributable for Visual Studio 2015 (If on a 64 bit system grab both x86 and x64)
+1. Windows 10 DK Is probably needed if you're on Windows 10
+1. Having Git is also necessary (For submodules), unless someone sent you a zip of the repo with submodules
+
+## Downloading and building
+
+Run this command in a cmd from the folder where you want to download etterna:
+
+ git clone --depth=1 https://github.com/etternagame/etterna.git
+
+Make sure you're in the right branch(default is master). Find out which is the latest one by asking someone. As of 7/17 this is "develop". To change your branch to that one open a cmd in a folder inside the repo you cloned(Inside /etterna) and do
+
+ git checkout develop
+ git submodule update --init
+
+Change develop to the branch you want (master is usually the stable branch and develop the playground, unstable one). Remember to run git submodule.
+
+Run cmake(from cmd or cmakeGUI) configured for VS 2015 and open the project files generated(/Build/Etterna.sln). If not using cmakeGUI, the command should look like this(Run from a cmd in /Build/, you might have to change the Visual Studio version to the one you have):
+
+ cmake .. -G "Visual Studio 14 2015" --build
+
+Note that an error like this:
+
+![](https://cdn.discordapp.com/attachments/326225923240230923/337716512758562817/unknown.png)
+
+While compiling is completely normal.
+
+In order to build an installer first compile and then run stepmania.nsi(Right click+ run NSIS script) to make the installer.
+To play without installing simply compile and open etterna/Program/Etterna.exe or run the Etterna project from VS.
+
+NOTE: You may need to make sure you're compiling as Release(Defaults to Debug)
+![](https://cdn.discordapp.com/attachments/326225923240230923/337715335480475650/unknown.png)
+
+NOTE 2: If you get an error like this:
+![](http://vivide.re/863GDX4n.png)
+Try adding this to StepMania.cpp:
+
+```
+#include
+#include
+int (WINAPIV * __vsnprintf)(char *, size_t, const char*, va_list) = _vsnprintf;
+```
+
+
+
+## Linux
+
+### 1-a: Prepare dependencies(Debian Based systems)
+
+Open a terminal and:
+
+#### Debian Based systems
+
+```
+sudo apt-get install build-essential git cmake
+sudo apt-get install libmad0 libcurl4-openssl-dev mesa-common-dev libglu1-mesa-dev libglew1.5-dev libxtst-dev libxrandr-dev libpng12-dev libjpeg-dev zlib1g-dev libbz2-dev libogg-dev libvorbis-dev libc6-dev yasm libasound-dev libpulse-dev binutils-dev libgtk2.0-dev libudev-dev libva-dev
+```
+
+#### Fedora Based systems
+
+```
+dnf install http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
+dnf install libXrandr-devel libXtst-devel libpng-devel libjpeg-devel zlib-devel libogg-devel libvorbis-devel yasm alsa-lib-devel pulseaudio-libs-devel bzip2-devel jack-audio-connection-kit-devel libva-devel pcre-devel gtk2-devel glew-devel libudev-devel
+```
+
+#### 2: Clone the etterna git and compile etterna
+
+Open a terminal and:
+
+```
+git clone --depth=1 https://github.com/etternagame/etterna.git
+cd etterna
+git submodule update --init
+mkdir Build
+cd Build
+cmake .. -G 'Unix Makefiles'
+make
+```
+
+Also note you probably want to do "git checkout" to the branch you want. Ask around to find out which one it is(develop is the development branch as of 2/2018)
+
+If it doesn't work you can look at how travis does it(https://travis-ci.org/etternagame/etterna)
+
+#### 3: Making a Launcher
+
+If you want to run etterna from a launch button like some desktop environments have, make a shell script like this and set the launch button to run the shell script. This assumes that the etterna folder is ~/etterna. If you don't know already, "~/" is shorthand for the home folder of the current user on Linux.
+
+Make a new emtpy text document and add the following:
+
+```
+#!/bin/bash
+cd ~/etterna
+./etterna
+```
+
+Save it as etternalauncher.sh or something similar
+
+right click it and make it executable in properties>permissions
+
+#### 4: Configuration
+
+Install songs in ~/.etterna/Songs/
+
+Install themes in ~/.etterna/Themes/
+
+Install noteskins in ~/.etterna/NoteSkins/
+
+Preferences are in ~/.etterna/Save/Preferences.ini
+
+Profiles are in ~/.etterna/Save/LocalProfiles/
+
+#### 5: Updating
+
+When you want to update your copy of SM5:
+
+cd into the etterna folder you cloned(usually ~/etterna), and run a git pull in terminal:
+
+```
+git checkout master
+git pull origin master
+```
+
+Replacing master(twice) for the git branch you want to update to. Then build again(As instructed above).
+
+
+
+## Mac
+
+#### 1: Download
+
+First we download/clone the repository from github:
+
+```
+git clone https://github.com/etternagame/etterna.git
+cd etterna
+git submodule update --init
+```
+
+#### 2: Libraries
+
+Next we install the necessary libs:
+
+```
+brew install openssl
+brew install --HEAD libuv --universal
+brew install yasm
+brew install nasm
+brew uninstall libuv
+brew install libuv --universal
+brew uninstall openssl
+brew install openssl --universal
+brew uninstall zlib
+brew install zlib --universal
+```
+
+#### 3: Final configuration
+
+We finish configuring the project:
+
+```
+mkdir build && cd build
+export LIBRARY_SEARCH_PATHS=../Xcode/Libraries
+export LIBRARY_PATH=../Xcode/Libraries
+mv ../src/archutils/Darwin/Etterna.pch ../src/archutils/Darwin/StepMania.pch
+cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -G "Xcode" ..
+mv ../src/archutils/Darwin/StepMania.pch ../src/archutils/Darwin/Etterna.pch
+```
+
+#### 4: Building
+
+Finally, we build the project:
+
+```
+xcodebuild ARCHS="x86_64" -project Etterna.xcodeproj -target Etterna -destination 'platform=OS X,arch=x86_64' -xcconfig ../Xcode/conf.cnf
+```
diff --git a/Docs/Contributing.md b/Docs/Contributing.md
new file mode 100644
index 0000000000..2e8552c4aa
--- /dev/null
+++ b/Docs/Contributing.md
@@ -0,0 +1,53 @@
+## Contributing
+
+Anyone is welcome to contribute! These are the areas where help is needed the most.
+
+ * [C++](#c)
+ * [Lua](#lua)
+ * [Documentation](#documentation)
+ * [Translating](#translating)
+ * [Packaging](#packaging)
+ * [Graphic Design](#graphic-Design)
+ * [Chart Making](#chart-making)
+
+
+### C++
+
+If you have *any* experience with C++ (Or even C and wanna learn a bit of C++) your help would be much appreciated!
+There's **A LOT** of things that need doing. If you don't have any specific thing you want to work on, here are some ideas:
+ - [GitHub Issues](https://github.com/etternagame/etterna/issues)
+ - [Coverity Defects](https://scan.coverity.com/projects/etternagame-etterna) (Currently these are private, you can request access with an email, we might make this public in the future)
+ - Cleaning up the codebase in general (There's a lot of things that would be nice to see done, like replacing usage of RString with std::string)
+ - If you know how to use them and see a good place for them, some usage of modern C++ features like smart pointers might be good to see in the project :)
+
+### Lua
+
+Lua is a fairly simple language. If you have experience in any other programming language, you'll probably be able to get the basics of its syntax in under an hour. https://www.lua.org/pil/contents.html is probably a good place to learn a bit.
+
+Lua is used in Etterna for Themes and Noteskins.
+
+Noteskins control the way the notes are drawed (Most noteskins have very similar logic and only different images, but noteskins have the power to do a lot more, and some take advantage of that).
+
+You can think of themes as the front end of the game. The way each screen is drawn, how screen branching (Changing) happens, and other things are controlled by the theme. A theme can even create new screens from scratch, catch inputs (Both mouse and keyboard), and other things. They're fairly powerful.
+
+Currently, there's a lack of alternative themes (To the default one, Til Death) for Etterna. [Spawncamping-Wallhack](https://github.com/ca25nada/spawncamping-wallhack) is the only complete theme that supports Etterna as far as I know.
+
+### Documentation
+
+The project is sorely lacking in documentation. The current aim is to document the Lua stuff in https://etternagame.github.io/Lua-For-Etterna/API/Lua.xml (This is forked from http://dguzek.github.io/Lua-For-SM5/API/Lua.xml, a community-made reference for SM5 Lua). We intend to get the C++ documentation done in https://etternagame.github.io/wiki/ (At first we wanted to make this page have 3 "sections": General, Lua and C++, but gave up). Then there is a general wiki with information that can be useful to end users (https://wiki.etternaonline.com/).
+
+### Translating
+
+The Til Death theme (Default) only has one translation available. In order to make others, simply copy etterna/Themes/Til Death/Languages/en.ini and translate all the right-side words (After the `=`). Also, a list of the words/text/captions/things that aren't translate-able in the theme would be useful to make them(Some of the text is hard-coded so it's not possible to translate it).
+
+### Packaging
+
+A few people have complained about the lack of packages for Linux in general. If you'd like to, you can try working on a package for your favorite distro. I've already made a more-or-less functional debian package here: https://github.com/nico-abram/etterna/tree/debian/
+
+### Graphic Design
+
+A lot of things in the game have been done in a hurry to simply provide a basic UI so things can be used. We usually mostly care about features working. Mockups for new designs, improved gfx (Images) and other ideas are incredibly welcome. This goes for both the default theme and the website, etternaonline. If you're interested, you could ask around in the etternaonline discord. Also, concepts for completely new themes would be interesting to see (In case someone who knows how to implement one decides to work on it).
+
+### Chart Making
+
+As the content in the game is completely community-driven, new charts and packs keep the game fresh. They make old time players come back for a day. Even if it doesnt seem like much, every chart makes the game as a whole more valuable. You can get started by clicking "Editor" within the client.
diff --git a/Docs/Changelog_SSCformat.txt b/Docs/legacy/Changelog_SSCformat.txt
similarity index 100%
rename from Docs/Changelog_SSCformat.txt
rename to Docs/legacy/Changelog_SSCformat.txt
diff --git a/Docs/Changelog_language.txt b/Docs/legacy/Changelog_language.txt
similarity index 100%
rename from Docs/Changelog_language.txt
rename to Docs/legacy/Changelog_language.txt
diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/legacy/Changelog_sm-ssc.txt
similarity index 100%
rename from Docs/Changelog_sm-ssc.txt
rename to Docs/legacy/Changelog_sm-ssc.txt
diff --git a/Docs/Changelog_sm5.txt b/Docs/legacy/Changelog_sm5.txt
similarity index 97%
rename from Docs/Changelog_sm5.txt
rename to Docs/legacy/Changelog_sm5.txt
index 191c4a7ff6..4ceee1322b 100644
--- a/Docs/Changelog_sm5.txt
+++ b/Docs/legacy/Changelog_sm5.txt
@@ -1,2616 +1,2616 @@
-StepMania 5 Changelog
-________________________________________________________________________________
-The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes
-from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
-________________________________________________________________________________
-
-2016/06/28
-----------
-* [Gameplay] Moved pause menu logic to a script in _fallback. Added
- documentation to help other themes implement a pause menu.
-
-2016/06/24
-----------
-* [SelectMusic] Added AllowHoldForOptions preference to disable holding start
- to go to the player options screen. [kyzentun]
-* [General] Back button will only back out of the screen on a press, not when
- it is still being held from the previous screen. [kyzentun]
-
-2016/06/12
-----------
-* [ScreenSyncOverlay] Moved actors to lua to make them themable. [kyzentun]
-
-2016/06/09
-----------
-* [Gameplay] Ready and Go announcer sounds no longer play simultaneously. If
- the Ready animation doesn't exist and the Go animation exists, only the
- Go announcer sound is played. If neither animation exists, only the Ready
- announcer sound is played. [kyzentun]
-
-2016/06/07
-----------
-* [NotesWriterSM] Stops, delays, and warps that occur on the same row are now
- summed correctly. Fixes bug that deleted warps that were on the same row
- as a stop. [kyzentun]
-* [Sound] Ignore invalid SoundDriver preference. [kyzentun]
-
-2016/06/06
-----------
-* [Language] Traditional Chinese translation added. [ddrtime]
-
-2016/05/25
-----------
-* [MemoryCards] Fixed bug that caused loading profiles from usb drives to
- crash. [djpohly]
-
-2016/05/20
-----------
-* [Global] Removed UndocumentedFeature lua function because it was just a way
- to crash with a message. [kyzentun]
-
-
-2016/05/11
-----------
-* [Minimaid] Fixed crash that occurred when the minimaid lights driver was
- selected, but no minimaid device was connected. [wolfman2000]
-
-================================================================================
-StepMania 5.0.11 | 20160401
---------------------------------------------------------------------------------
-
-2016/03/22
-----------
-* [Prefs] Added DisableUploadDir preference to skip saving a score entry to
- Save/Upload every time a song is played. Generating the unique filename
- can take several seconds when there are years of scores accumulated, and it
- clutters the disk. This preference defaults to false. [kyzentun]
-
-2016/03/17
-----------
-* [Actor] Added get and set_tween_uses_effect_delta lua functions to make an
- Actor use the effect clock for tweening. [kyzentun]
-
-2016/03/15
-----------
-* [ProfileManager] Added GetStatsPrefix and SetStatsPrefix lua functions for
- separating scores into different stats files. [kyzentun]
- (this is kind of a stop gap, I'd really like to rewrite scoring to save
- more data so that a score earned with one set of timing windows and weights
- can be converted to the equivalent score with different timing windows)
-
-2016/03/14
-----------
-* [Online] Stepmania will force disconnection from the SMO server when
- entering the jukebox or sync calibration screens to avoid crash. [kyzentun]
-
-2016/03/05
-----------
-* [global] get_sound_driver_list lua function added. [kyzentun]
-
-2016/03/02
-----------
-* [Gameplay] Fixed No Fakes mod to remove fakes inside warps. [kyzentun]
-* [Keymaps] Added special name for colon key so it can be bound. [medmig]
-
-2016/02/20
-----------
-* [Language] Bahasa Indonesian translation added to default theme. [JOELwindows7]
-
-2016/02/15
-----------
-* [Input] Linux event devices now start at JOY10 instead of JOY1. Without
- this change, if one dance pad is a joystick device, and the other is an
- event device, they will both be JOY1, and stepmania will think they are the
- same dance pad. If you use Linux, assume that you have to remap your dance
- pad. [kyzentun]
-
-2016/02/13
-----------
-* [Lights] Minimaid driver added for Linux. This is practically identical to
- the Windows minimaid driver that pkgingo wrote.
-* [Gameplay] When checking for the first second in a song, AutoKeysound notes
- are now ignored, being treated as if they were background music. This
- allows the intro of BMS files to play as soon as ScreenGameplay is loaded,
- while still having a delay before the real notes come in. [nixtrix]
-
-2016/02/04
-----------
-* [Course] In an Endless course, songs will only be repeated after all songs
- in the group have been played. [blindbox]
-
-2016/02/03
-----------
-* [ScreenManager] Added PlayInvalidSound, PlayStartSound, PlayCoinSound,
- PlayCancelSound, and PlayScreenshotSound lua bindings. [kyzentun]
- Added get_input_redirected and set_input_redirected to allow the theme to
- disable the normal input functions. (Example: a custom lua menu on
- Select Music. When the menu is up, the theme doesn't want the player's
- input to move the music wheel.) This is in SCREENMAN so that it will work
- on all screens. [kyzentun]
-* [ScreenSelectMusic] Added CanOpenOptionsList lua binding. OpenOptionsList
- will do nothing if CanOpenOptionsList returns false. [kyzentun]
-
-2016/01/18
-----------
-* [Edit Mode] Added "Clear timing in region" to timing menu. [kyzentun]
- Fixed crash that occurs when "Paste timing data" is used after copying a
- region of timing data that only contains stops. [kyzentun]
-
-2016/01/14
-----------
-* [Gameplay] Added pause menu to default theme. Activated by pressing
- Select, or Back twice without pressing something else. Has options for
- restarting or forfeiting the current song in normal play. Course mode has
- options for skipping the current song or ending the course or forfeiting.
- [kyzentun]
-* [Graphics] When fetching the list of resolutions, only 32bpp modes are
- tested because less than 32bpp is not supported on Windows 8 and newer, and
- because the bpp doesn't matter when fetching a list of resolutions. This
- speeds up the load time of the Graphics/Sound option screen. [kyzentun]
-
-2016/01/10
-----------
-* [RageFile] Lua functions for RageFile should now emit an error when the
- file was not opened correctly instead of crashing. [kyzentun]
-
-2016/01/05
-----------
-* [Linux] Disable DPMS on startup and restore setting on exit. [kyzentun]
-
-2015/12/27
-----------
-* [RageFileManager] Ignore OS X special files in GetDirListing. [kyzentun]
-
-2015/12/20
-----------
-* [Fonts] Fixed crash bug in Texture Font Generator. [drewbarbs]
-
-2015/12/16
-----------
-* [Player] ChangeLife and SetLife functions added. [kyzentun]
-
-2015/12/13
-----------
-* [popn] Judgment levels in popn game mode now use W1 to W5. [parashep]
-
-2015/12/05
-----------
-* [Player] Guitar mode cruft removed from Player. [tertu]
-
-2015/12/04
-----------
-* [NoteField] Changed DrawBeatBar to check the M-mod so that smaller beat
- bars are drawn when M-mods are used in edit mode. [kyzentun]
-
-2015/11/09
-----------
-* [Gameplay] BG Brightness is no longer forced to 100% on songs that only
- have a beginner chart. [kyzentun]
-
-2015/11/08
-----------
-* [ScreenSelectMusic] Using lua music files for the section music and similar
- things works now. [kyzentun]
-
-2015/11/05
-----------
-* [PlayerOptions] Fixed bug that was clearing the noteskin back to default.
- [kyzentun]
-
-================================================================================
-StepMania 5.0.10 | 20151031
---------------------------------------------------------------------------------
-
-2015/10/29
-----------
-* [Language] French translation updated. [Arvaneth]
-
-2015/10/27
-----------
-* [Compiling] Link with /MT on windows instead of /MD. [wolfman2000]
-* [Fonts] Put Texture Font Generator back in package. [wolfman2000]
- Build Texture Font Generator when WITH_FULL_RELEASE or
- WITH_TEXTURE_GENERATOR is enabled. [wolfman2000]
-
-2015/10/26
-----------
-* [Song] Added GetMainTitle lua function for bypassing ShowNativeLanguage
- preference. [kyzentun]
-
-2015/10/25
-----------
-* [Compiling] Number of jobs used when building ffmpeg can be customized by
- WITH_FFMPEG_JOBS. [wolfman2000]
- Appveyor support added for automated windows building. [wolfman2000]
-
-2015/10/23
-----------
-* [BMS] Fixed crash when an unknown type chart was in a bms. [kyzentun]
-
-2015/10/21
-----------
-* [Actor] Changed PlayCommandNoRecurse so that setting a theme metric to a
- function that doesn't exist doesn't emit an error. [kyzentun]
-* [Compiling] Allow WITH_MP3=Off and WITH_WAV=Off to compile. [wolfman2000]
-* [EditMode] Fixed crash on missing ScreenMiniMenuTimingDataChangeInformation
- metrics. [kyzentun]
-* [ScreenEvaluation] Changed assert that occurs when leaving ScreenGameplay
- with SM_GoToNextScreen to give more info. [kyzentun]
-
-2015/10/20
-----------
-* [Compiling] Fixed cmake error when compiling with -DWITH_SSE2=off. [wallacoloo]
- Don't define CPU_X86 on non-x86. [wallacoloo]
-* [Noteskins] If the fallback for a noteskin is not found, that noteskin is
- not loaded, to prevent picking it and crashing. [kyzentun]
-
-2015/10/18
-----------
-* [BitmapText] Added set_mult_attrs_with_diffuse lua function. [kyzentun]
-
-2015/10/17
-----------
-* [Course] Fixed loading of courses that use WORST entries. [wolfman2000]
-* [SextetStream] SextetStream stuff is now in all platforms. [wolfman2000]
-
-2015/10/15
-----------
-* [BMS] Changed bms loading so that iidx bms files aren't loaded as kb7.
- [zardoru]
-
-2015/10/12
-----------
-* [ActorMultiVertex] Fixed bug that *sometimes* caused diffuse to be applied
- to verts wrong. [kyzentun]
-
-2015/10/11
-----------
-* [Song] Changed song loading to allow a song to have a blank MusicFile field
- if the song has any keysounds. A blank MusicFile entry can result from
- having '#' in the music file name, or be intended for bms files. Do not use
- '#' in any fields, the .sm and .ssc file formats do not support it. The
- engine has to detect that the field was loaded blank and look through the
- song folder to figure out what was supposed to be there. [kyzentun]
-
-2015/10/09
-----------
-* [Edit Mode] Changed Current Second field to not have the global offset
- added in. People were using one global offset for syncing to workaround
- the problem and sync by comparing the Current Second in Edit Mode to the
- current second in a music editor. The workaround of using a different
- global offset for syncing should no longer be necessary. [kyzentun]
-* [Input] Fixed input lockup caused by scrolling the mouse wheel. Why wasn't
- this reported sooner? [kyzentun]
-
-2015/10/07
-----------
-* [ActorFrame] ActorFrame:SetDrawByZPosition now returns self. Missed a spot
- when implementing function chaining. [kyzentun]
-* [Gameplay] MaxRegenComboAfterMiss preference brought in. When a step is
- missed in gameplay, the combo has to get back up to RegenComboAfterMiss
- before the player starts regaining life. If MaxRegenComboAfterMiss is
- greater than RegenComboAfterMiss, then each successive miss increases
- RegenComboAfterMiss until it reaches RegenComboAfterMiss.
- MaxRegenComboAfterMiss defaults to 5, the same as RegenComboAfterMiss, so
- there should be no behavior change unless the preference is manually
- changed. [dbk2]
-* [Gameplay] When disqualification was turned on via Preferences, the old
- logic exhibited two problems:
- 1. charts with attacks were always disqualified from ranking
- 2. charts without attacks could be disqualified from ranking if the attack
- modifier was set to "Off"
- So, this commit fixes those problems. If a chart has attacks, and the
- attack modifier is used to turn them "Off", then disqualification is
- enforced.
- Additionally, disqualification is enforced if the attack modifier is set to
- "Random Attacks." This part might not be necessary, but I acted on the
- assumption that random attacks could theoretically make a chart easier.
- [dbk2]
-
-2015/10/04
-----------
-* [FFmpeg] Upgrade FFmpeg to 2.1.3 for Windows. [wolfman2000]
-* [FFmpeg] Fixed cmake WITH_SYSTEM_FFMPEG option. [lthls]
-
-2015/10/03
-----------
-* [FFmpeg] Upgrade FFmpeg to 2.1.3 for Mac OS X. [wolfman2000]
-* [Gameplay] Fixed timing to apply the current music rate to the global
- offset so that playing at different music rates doesn't make a chart off
- sync. [Matt McCutchen]
-
-2015/10/02
-----------
-* [Edit Mode] .sm files will no longer be saved when split timing is used
- because per-chart timing cannot be done in the .sm format. [kyzentun]
-* [Scoring] Fixed bug that caused missed holds to be recorded as held in the
- value returned by PlayerStageStats:GetRadarActual(). [kyzentun]
-
-2015/09/21
-----------
-* [Sprite] Added set_use_effect_clock_for_texcoords for toggling whether the
- tex coord velocity uses the effect clock instead of the time.
-
-2015/09/10
-----------
-* [MusicWheel] Fixed SetItemPosition so that it actually passes the item
- index and the number of items to the transform function. [kyzentun]
-
-2015/09/09
-----------
-* [Notefield] Fixed bug where the hold body doesn't scroll if it goes off the
- top of the screen. [waiei]
-
-2015/09/08
-----------
-* [Compiling] Compiling stepmania on Windows with the locale set to Japanese should work now. [wolfman2000]
-
-2015/09/06
-----------
-* [Preferences] Fixed crash on Advanced Input Options on OS X caused by the
- Axis Fix preference not existing on OS X. The preference does nothing on
- OS X, but the game no longer crashes on that screen. [kyzentun]
-
-2015/09/03
-----------
-* [Fonts] Respliced large kanji sprite sheets from 32x106 and 32x61 to 63x54
- and 48x41 to bring them under 4096 pixels tall, which was causing a forced
- resize and slowing down loading time. [kyzentun]
-* [Gameplay] Fixed song position updating logic so that the
- ScreenGameplay:PauseGame lua function actually pauses the game. Start,
- Select, and Back are all used for different ways of giving up, so the
- feature remains unused in the default theme. [kyzentun]
-
-2015/09/02
-----------
-* [Gameplay] Fixed Player logic that spammed TNS_AvoidMine repeatedly. [kyzentun]
-
-2015/08/29
-----------
-* [Edit Mode] Fixed crash on entering edit mode caused by entering edit mode
- as Player 2. Edit Mode only works as Player 1. [kyzentun]
-
-2015/08/23
-----------
-* [BMS] Added myo2 channel layout and kb7 charts. Added preview point and
- fixed offset support and linear solo bms layout. [zardoru]
-* [Linux] Symbolic links will be followed to find the actual executable dir. [Wallacoloo]
-
-2015/08/20
-----------
-* [Minimaid] Minimaid support built in by default instead of off by default. [wolfman2000]
-* [Options] Put AllowExtraStage on Advanced Options screen in default. [kyzentun]
-
-2015/08/19
-----------
-* [Gameplay] RandomBGEndsAtLastBeat metric defaults to true to be similar to
- old behavior. [wolfy852]
-
-2015/08/08
-----------
-* [General] When the HighResolutionTextures preference is set to Auto,
- StepMania checks whether the display height is greater than the theme
- height instead of whether it's greater than 480. [shakesoda]
-
-2015/08/04
-----------
-* [PIUIO] Only send LightState changes to PIUIO when there is a change. [dbk2]
-
-2015/08/02
-----------
-* [NoteField] Fixed bottomcap when NoteDisplay is zoomed out. [hanubeki]
-
-2015/07/22
-----------
-* [Compiling] Fixed building on 32bit linux. [kyzentun]
-
-2015/07/19
-----------
-* [Pump] Added TimingWindowSecondsCheckpoint for the timing window that
- checkpoint holds allow you to release for. [wolfman2000]
-
-2015/07/18
-----------
-* [General] Fixed bug that skipped notes on beat 0 in score. [kyzentun]
-
-2015/07/16
-----------
-* [ActorUtil] ActorUtil.ResolvePath and ResolveRelativePath now take a
- boolean flag to tell if the thing is optional. [kyzentun]
-* [CryptMan] Fixed bug that clipped hash strings with zeros. [kyzentun]
-
-2015/07/15
-----------
-* [Sprite] Sprite now executes the AnimationFinished command when it reaches
- the end of its animation and starts over. [kyzentun]
-
-2015/07/11
-----------
-* [ScreenMapControllers] If the AutoDismissWarningSecs metric is less than
- .25 seconds, the warning will not be shown (the TweenOn command for it will
- not be played). Instead, the NeverShow command will be played. If the
- NeverShow command does not exist for the warning actor, the warning actor
- will be set to hibernate forever. [kyzentun]
-
-2015/07/02
-----------
-* [Gameplay] Random background video behavior is now controlled by these
- three metrics in the Background section:
- RandomBGStartBeat sets the beat of the music the first random bg occurs on.
- RandomBGChangeMeasures sets the number of measures between changes.
- RandomBGChangesWhenBPMChangesAtMeasureStart toggles the behavior in its name.
- RandomBGEndsAtLastBeat toggles the behavior in its name.
-
-================================================================================
-StepMania 5.0.9 | 20150520
---------------------------------------------------------------------------------
-
-2015/06/10
-----------
-* [global] get_music_file_length lua function added. [kyzentun]
- multiapproach lua function now takes an optional 4th argument to multiply
- the speeds by. [kyzentun]
-* [NoteDisplay] 1px seam in hold cap rendering fixed. [A.C/waiei]
-* [RageSound] get_length lua function added. [kyzentun]
-
-2015/06/06
-----------
-* [ScreenInitialScreenIsInvalid] Error screen for themes that set an invalid
- initial screen. [kyzentun]
-
-2015/06/05
-----------
-* [global] update_centering lua function exposed. [kyzentun]
-* [ScreenOverscanConfig] New screen in _fallback for interactively adjusting
- the preferences that already existed for dealing with overscan. [kyzentun]
-* [Actor] BlendMode_Subtract no longer crashes on the d3d renderer. It does
- not do subtraction blending correctly, this just prevents the crash.
- [kyzentun]
-
-2015/06/03
-----------
-* [Actor] bounce and bob effects no longer round pixel coords. [kyzentun]
-* [RageFile] Exposed Flush function to Lua. [kyzentun]
-
-2015/05/29
-----------
-* [OptionsList] The OptionsListQuickChange, OptionsListLeft, and
- OptionsListRight messages now have a Selection parameter that has the id of
- the selection the player moved to. [nixtrix]
-
-2015/05/24
-----------
-* [Gameplay] Autokeysounds are no longer twice as loud when playing
- keysounded charts with two players. [nixtrix]
-
-2015/05/15
-----------
-* [BMS] .lua files defined in the #BMP tags now work as BG animations, and the
- #difficulty tag is now supported. [nixtrix]
-* [general] BackInEventMode code now works when called from either player.
- [nixtrix]
-* [cmake] JACK is now properly found by CMake.
-* [theme] Preview music fadeout time is now adjustable by the metric
- SampleMusicFadeoutSeconds. [nixtrix]
-* [Song] Setting a sample length of 0 uses the length of the entire preview
- file. [nixtrix]
-
-================================================================================
-StepMania 5.0.8 | 20150510
---------------------------------------------------------------------------------
-
-2015/05/10
-----------
-* [General] Screenshots are not tagged with song title or screen name because
- this causes problems when titles have UTF8 or slashes. [kyzentun]
-
-2015/05/09
-----------
-* [general] Workaround for the axis problem added. Set the Axis Fix
- preference under Input Options to true if you have the axis problem.
- [Fighter19]
-* [general] Added XML to Lua converter. See Docs/Themerdocs/XmlToLua.txt for
- details. [kyzentun]
-
-2015/05/08
-----------
-* [compiling] Added -DWITH_CRYSTALHD_DISABLED cmake options to allow more
- users to build on Linux. [wolfman2000]
-
-2015/05/05
-----------
-* [Gameplay] Holding Select on gameplay now skips the current song in course
- or endless mode. [kyzentun]
-
-2015/04/30
-----------
-* [beat] Default key configuration slightly tweaked, space is now the
- default scratch key, key7 is now mapped to right instead of key3.
- Backwards and shuffle chart mods now ignore the scratch column. [jobn]
-
-2015/04/27
-----------
-* [general] "Do not show again" button on missing texture dialog works now.
- If the background or banner file for a song doesn't exist when the song is
- cached, the cache file will have a blank path so Stepmania won't try to
- load the nonexistent banner or background.
-
-2015/04/25
-----------
-* [General] Screenshot key now checks whether there is a current song, and
- puts the song title and current screen name in the screenshot filename. [kyzentun]
-
-2015/04/24
-----------
-* [Gameplay] Toasty animation can now occur multiple times during gameplay. [kyzentun]
-
-2015/04/23
-----------
-* [ServiceMenu] Entries in service menu rearranged to hopefully organize them
- better. ScreenOptionsInputSub and ScreenOptionsDisplaySub added. Updating
- a theme to show the options for the new screens should be a simple matter of
- changing the LineNames entry for ScreenOptionsService to include
- "InputOptions" and "SoundGraphics". [tuxdude]
-
-2015/04/18
-----------
-* [EditMode] Fixed bug that made alter menu choices prompt for clearing. [kyzentun]
-* [NoteColumnRenderer] Added handling for diffuse and glow to make rainbow
- and related effects work. [kyzentun]
-
-2015/04/15
-----------
-* [compiling] -DWITH_LIBVA option added to cmake building to fix compiling
- problems for some linux users. [wolfman2000]
-
-2015/04/14
-----------
-* [SelectMusic] Disabled late join on Extra Stage to prevent crash on
- Evaluation Summary. [kyzentun]
-
-2015/04/13
-----------
-* [EditMode] Fixed Revert From Disk to actually work. [kyzentun]
-* [japanese] Language update from hanubeki. [hanubeki]
-
-2015/04/11
-----------
-* [dev] cpack support for installing. [wolfman2000]
-* [TimingData] Fixed bug that made steps on the same row as a stop and a bpm
- change unhittable. [kyzentun]
-
-2015/04/10
-----------
-* [Profile] Kluged together a fix for scores on edit charts not being loaded
- until after the chart is played. [kyzentun]
-
-2015/04/08
-----------
-* [ActorSound] IsAction attribute added. get/set_is_action functions added.
- [kyzentun]
-* [GameSoundManager] is_action arg added to PlayOnce. [kyzentun]
-
-2015/04/06
-----------
-* [global] rec_print_children and rec_print_table lua functions added to
- _fallback. [kyzentun]
-* [Language] Dutch translation updated. [Thumbsy]
-* [RadarValues] Stream, Voltage, Air, Freeze, and Chaos are no longer capped
- at 1. Stream and Voltage no longer count hold heads twice.
- RadarCategory_Notes added, which counts all notes.
- Scoring bug fixes related to radar calculation. [kyzentun]
-* [ScreenSelectGame] Exit option returns to ScreenOptionsService unless the
- game type actually changed. [Wallacoloo]
-
-2015/04/04
-----------
-* [EditMode] Added submenus to the timing edit menu to allow shifting,
- copying, and pasting any or all timing segments in the selected region or
- after the current cursor position. [kyzentun]
- Shifting menus in edit mode now have choices for 1, 2, or 4 measures or 2
- beats. [kyzentun]
-* [global] Fixed crash on OS X for certain dance pads when in Japanese
- locale. [Wallacoloo]
-
-2015/04/03
-----------
-* [ScreenGameplay] The NoteField board is now underneath everything except
- the backgound. This means underneath any custom actors on the underlay or
- overlay or decoration layers, and also underneath the combo/judgment even
- when the ComboUnderField metric is true. [kyzentun]
- Fixed bug in screen filter in default theme that made it not appear under
- the field when a solo file was played without Center1Player. [kyzentun]
-
-2015/04/02
-----------
-* [global] commify function exposed to lua. [kyzentun]
-
-================================================================================
-StepMania 5.0.7 | 20150401
---------------------------------------------------------------------------------
-
-2015/03/30
-----------
-* [Select Music] Ctrl+Shift+R mapped to reload the current song. [kyzentun]
-* [Song] ReloadFromSongDir lua function exposed. [kyzentun]
-* [Preferences] NeverCacheList preference added. It's a comma separated
- list of group names, if a song is in one of the named groups, it is never
- cached. [kyzentun]
-
-2015/03/27
-----------
-* [Select Music] Ability to delete the current song by pressing Ctrl+Backspace added. [Wallacoloo]
-
-2015/03/24
-----------
-* [Sprite/RageTexture] GetTexturePath moved to RageTexture and renamed to
- GetPath. [kyzentun]
-
-2015/03/22
-----------
-* [Dev] Primary build method of all platforms changed to CMake. People
- building from source must install CMake (min 2.8.12) and read
- Build/README.md for building instructions. [wolfman2000]
-
-2015/03/18
-----------
-* [OSX] Empty Stepmania directory created on desktop removed. [dguzek]
-
-2015/03/17
-----------
-* [ActorFrameTexture] Example added to Themerdocs/Examples/Example_Actors/.
- Crash fixes for AFTs. [sigatrev]
-
-2015/03/15
-----------
-* [Sprite] GetTexturePath added. [kyzentun]
-
-2015/03/12
-----------
-* [Language] Docs/Changelog_language.txt added for tracking language changes.
-
-=======
-================================================================================
-StepMania 5.0.7rc | 20150309
---------------------------------------------------------------------------------
-
-2015/03/09
-----------
-* [EditMode] Autosave every 5 minutes added. [kyzentun]
-* [General] NotesLoaderSM, NotesLoaderSSC, IniFile::ReadFile rewritten,
- load times substantially faster. [kyzentun]
-* [Preference] HarshHotLifePenalty preference added, for toggling whether
- LifeMeterBar takes away .1 life when it's full. [kyzentun]
-
-2015/03/08
-----------
-* [EditMode] Clearing an area now prompts for confirmation if it contains
- EditClearPromptThreshold notes or more. EditClearPromptThreshold is a
- preference that can be set in the Advanced Options section, or in the
- options in Edit Mode. [kyzentun]
-
-2015/03/05
-----------
-* [Graphics] DX9 support improved, giving a large speed boost and fixing the
- problem that made people get stuck with 16bit color. [xwidghet]
-
-2015/03/04
-----------
-* [Loading] The song length from the cache is used now. This cut loading time
- by 30% for kyz. [kyzentun]
-
-2015/03/02
-----------
-* [Song] Per-chart music feature added. Each chart can have a MUSIC tag.
- [kyzentun]
-
-2015/03/01
-----------
-* [SelectMusic] Select Music now plays music file named by #PREVIEW tag if
- it's not blank, instead of using the song file for the sample music. The
- sample length is read from the preview file. The sample start is treated as
- 0. [kyzentun]
-* [Song] GetPreviewMusicPath added. [kyzentun]
-* [foreach] foreach_ordered lua function now works on tables that have both
- number and string keys. Number keys are iterated over first. [kyzentun]
-
-2015/02/28
-----------
-* [General] Pause/Break key now toggles "action" sounds off or on. There is
- also a button in the F3 debug menu (press A, there are so many that it is
- off the bottom) for people that don't have a Pause/Break key. [kyzentun]
-
-2015/02/27
-----------
-* [ActorFrame] Fixed RemoveChild and RemoveAllChildren lua functions to
- delete the children instead of leaking memory. [kyzentun]
-* [Font] Asserts and other things that caused Stepmania to crash on font
- mistakes now emit non-fatal errors. [kyzentun]
-
-2015/02/26
-----------
-* [PaneDisplay] Changed to print an error when metrics or player number are
- omitted instead of crashing. [kyzentun]
-* [Screen] Fixed crash when AddInputCallback is passed nil. [kyzentun]
-
-2015/02/22
-----------
-* [BitmapText] Place characters of right-to-left alphabets correctly.
- (untested) [roothorick]
-
-================================================================================
-StepMania 5.0.6 | 20150217
---------------------------------------------------------------------------------
-
-2015/02/16
-----------
-* [EditMode] Fixed mistake in TimingData that broke editing bpms. [kyzentun]
- Fixed crash when deleting steps. [kyzentun]
-* [InputMapper] Backslash can be mapped now. [kyzentun]
-
-================================================================================
-StepMania 5.0.5 | 20150214
---------------------------------------------------------------------------------
-
-2015/02/12
-----------
-* [InputMapper] Added D-Force Automappings [shakesoda]
-
-2015/02/04
-----------
-* [ActorFrame] GetUpdateRate added. [kyzentun]
-* [Background] Using the wrong transition name no longer crashes.
- Playback rate is applied to videos.
- Checkerboard and other BackgroundEffects that use the same file twice no
- longer play videos back at multiplied speed. [kyzentun]
-* [Sprite] Get/SetDecodeMovie added. [kyzentun]
-
-2015/02/03
-----------
-* [MusicWheel] HideActiveSectionTitle metric added. [djpohly]
-
-2015/02/02
-----------
-* [ActorMultiVertex] ForceStateUpdate and Get/SetDecodeMovie added. [kyzentun]
-* [RageTexture] GetWidth and Height functions added.
- ( means Source, Texture, or Image) [kyzentun]
-* [Scripts] find_missing_strings_in_theme_translations function added to
- _fallback scripts to assist translators in finding what needs to be
- translated. If you need/want to run it on your them, write a piece of lua
- like this:
- find_missing_strings_in_theme_translations("_fallback", "en.ini")
- The first arg is the folder name of the theme to look at.
- The second arg is the name of the language that is fully translated. All
- other languages will be compared to it to decide what is missing or unused.
- [kyzentun]
-* [Song] GetBGChanges added. [kyzentun]
-
-2015/02/01
-----------
-* [ActorMultiVertex] Animation state system added. AMVs can now have
- animated textures controlled by states written in lua. [kyzentun]
-
-2015/01/31
-----------
-* [EditMode] Want more lead in time before recording starts?
- It's a preference. [kyzentun]
-
-2015/01/30
-----------
-* [Actor] Wrapper states added. This makes wrapping an Actor inside an
- ActorFrame for any reason unnecessary, and makes it possible to do things
- that were only possible by wrapping an Actor in an ActorFrame to Actors
- that you couldn't put inside a frame before. [kyzentun]
-
-2015/01/20
-----------
-* [ScreenSelect] ChoiceNames can be a lua command that is evaluated to get a
- list of the gamecommands. The main use of this is to get rid of the huge
- list of metrics that ScreenSelectStyle requires. A single lua function
- instead of a metric for every style for every game type. [kyzentun]
-* [ScreenSelectMaster] IconChoicePosFunction metric added. This metric is
- optional, if it's set, it must be set to a function that returns a table
- of positions. Each position is a table of the form "{x, y, z}", where x,
- y, and z are numbers and any that is not a number defaults to 0.
- The function is passed the number of choices for the screen.
- IconChoiceOnCommand and IconChoiceOffCommand metrics added so each choice
- doesn't require its own On/OffCommand pair. These are also optional, but
- if they are set, they will override the individual commands if they exist.
- (If "IconChoiceCactusOnCommand" and "IconChoiceOnCommand" both exist,
- "IconChoiceOnCommand" will be used.) [kyzentun]
- Example:
- # in metrics.ini
- IconChoicePosFunction=choice_positions
- -- In a file in Scripts/
- function choice_positions(count)
- local ret= {}
- for i= 1, ret do ret[i]= {i*24, i*48} end
- return ret
- end
-
-2015/01/16
-----------
-* [ScreenSelectMusic] HardCommentMeter metric added. Sets the meter that
- will trigger the "select music comment hard" announcer sound. [kyzentun]
-
-2015/01/12
-----------
-* [ScreenOptions] GetNumRows function added. [kyzentun]
-
-2015/01/09
-----------
-* [Sprite] SetStateProperties function added. [kyzentun]
-
-2015/01/06
-----------
-* [ActorMultiVertex] GetSpline and SetVertsFromSplines functions added.
- [kyzentun]
-* [NoteColumnRenderer] Functions for fetching the spline handlers for the
- column added. [kyzentun]
-* [NCSplineHandler] New class for setting various parameters of a spline used
- by a NoteColumnRenderer and containing the spline. [kyzentun]
-* [CubicSplineN] New class that provides spline functionality. [kyzentun]
-
-2014/12/26
-----------
-* [NoteField] Columns turned into actors that can be fetched with
- get_column_actors. [kyzentun]
- Tiny boost in fps when there is a large number of notes on screen.
-* [NoteColumnRenderer] New class for controlling one column. [kyzentun]
-
-2014/12/20
-----------
-* [Preferences] AllowMultipleHighScoreWithSameName, ComboContinuesBetweenSongs
- Disqualification, FailOffForFirstStageEasy, FailOffInBeginner,
- LockCourseDifficulties, InputDebounceTime, MaxHighScoresPerListForMachine,
- and MaxHighScoresPerListForPlayer added to service options.
- InputDebounceTime is in Input Options, the rest are in Arcade Options.
- (might not show up in themes that customize the order and placement of the
- preferences) [kyzentun]
-
-2014/12/18
-----------
-* [Profile] GetTotalDancePoints added. [kyzentun]
-
-2014/12/10
-----------
-* [EditMode] Play whole song and play from current beat will now play until
- either the music or the notes end, whichever is greater. [kyzentun]
- The screens used for setting the options used to play the screen and for
- adding attacks can be set through the "OptionsScreen" and "SetModScreen"
- metrics in the ScreenEdit section.
-* [GameState] ApplyPreferredSongOptionsToOtherLevels function added. [kyzentun]
-* [Player] "ComboBreakOnImmediateHoldLetGo" theme metric added. [sillybear]
-* [PlayerState] ApplyPreferredOptionsToOtherLevels function added. [kyzentun]
-
-2014/12/07
-----------
-* [Game] GetSeparateStyles function added. Use this to detect whether a game
- allows the players to play different styles. [kyzentun] (used by kickbox)
-* [GameManager] Lua Scripts/ folders are now reloaded when the Game mode is
- changed. [kyzentun]
-* [GameState] CanSafelyEnterGameplay function added. [kyzentun]
- In kickbox game mode, players can have different styles set, pass a
- PlayerNumber when using SetCurrentStyle or GetCurrentStyle.
-* [kickbox] New game mode with 4 styles. [kyzentun]
-* [ScreenGameplay] Notefield positioning is handled a bit differently now.
- See comments in _fallback/metrics.ini above the [ScreenGameplay]
- MarginFunction metric. Basically, you can define a lua function that
- returns the space you want at the edges and in the center instead of
- setting position metrics. Do NOT use Style:GetWidth to calculate the
- margins your function returns.
- ScreenGameplay now handles zooming the notefield to fit in the space
- instead of using the NeedsZoomOutWith2Players flag in the style.
- If the notefield doesn't fit in the space between the margins, and there is
- only one player, the player will be centered even if the Center1Player pref
- is false. [kyzentun]
-* [Style] NeedsZoomOutWith2Players decapitated. Always returns false now.
- GetWidth added. [kyzentun]
-* [techno] Techno game mode no longer has special column width for versus.
- Techno was the only game mode that used the NeedsZoomOutWith2Players flag,
- and the zoom factor it applied was 0.6, and the special versus column width
- was 0.6*normal, so this should make no difference. [kyzentun]
-
-2014/12/03
-----------
-* [command line arg] --game command line arg added for setting the game type
- when starting stepmania. [sillybear]
-* [Announcer] "evaluation full combo W3" and "evaluation full combo W4"
- responses added. [sillybear]
-
-2014/12/01
-----------
-* [ScreenMapControllers] Forced sanity checking of key mappings added.
- Start, MenuLeft, MenuRight, and Operator keys must be mapped.
- Reset key mappings option added to debug menu for recovering from an
- unusuble keymap without needing to find and delete KeyMaps.ini. [kyzentun]
-
-2014/11/30
-----------
-* [NoteField] New functions added for controlling the receptor and ghost arrow
- (explosion) flashes. [kyzentun]
-
-2014/11/28
-----------
-* [Profile] Guest and Test profile types added. All existing and new
- profiles are Normal. If a profile is changed to Guest through the profile
- management screen, it will always show at the top of the list. A profile
- set to Test will always be at the bottom of the list. Profiles can be
- moved around in the list.
- GetType and GetPriority lua functions added to Profile.
- Bug that caused a crash when a profile dir was renamed to a non-number and
- a new profile was created fixed. [kyzentun]
-* [Everything] Actor and singleton functions that formerly returned nothing now
- return the actor or singleton. Example (set zoom, x, y, and diffuse in one):
- self:zoom(.5):xy(_screen.cx, _screen.h-60):diffuse(color("#dc322f"))
- This also works for PlayerOptions and SongOptions API functions. Pass true
- as an extra arg, and they can be chained.
-
-2014/11/22
-----------
-* [Preferences] MinTNSToHideNotes preference added. [kyzentun]
-* [PlayerOptions] MinTNSToHideNotes mod added. [kyzentun]
-
-2014/11/15
-----------
-* [Preferences] Default Fail Type preference mechanism changed internally again.
- Set your Default Fail Type preference again. [kyzentun]
-
-2014/11/05
-----------
-* [ScreenPrompt] Answer OnCommand metrics fixed to actually work. [kyzentun]
-
-2014/11/01
-----------
-* [RollingNumbers] Cropping and color during tweens fixed. [kyzentun]
-
-2014/10/27
-----------
-* [Changelog] Vospi read the release notes.
-
-2014/10/23
-----------
-* [Global] approach, multiapproach, lerp, and lerp_color lua functions added. [kyzentun]
-
-2014/10/20
-----------
-* [StageStats] GetStepsSeconds function added. [kyzentun]
-* [Steps] If an unrecognized step type is saved, preserve that step instead of
- deleting it. A warning will be placed in the log file during song load. [kyzentun]
-
-================================================================================
-StepMania 5.0 beta 4a | 20141015
---------------------------------------------------------------------------------
-
-2014/10/19
-----------
-* [BackgroundEffects] Fixed errors in StretchNoLoop and StretchRewind.
-
-2014/10/13
-----------
-* [NoteDisplay] Var Player and Var Controller work for non-receptor arrows. [hanubeki]
-* [Mac OS X] Allow StepMania to be built and run in Yosemite.
-
-2014/10/11
-----------
-* [NoteDisplay] Add two noteskin metrics, {PartName}NoteColorType and
- {PartName}NoteColorCount. View https://github.com/stepmania/stepmania/pull/328
- for more information. [hanubeki]
-
-================================================================================
-StepMania 5.0 beta 4 | 20140930
---------------------------------------------------------------------------------
-
-To reduce the number of entries in this file, entries are dated to the Saturday after they occurred.
-
-2014/09/27
-----------
-* [Preferences] DebounceCoinInput time pref added for machines that need a
- different debounce time for coin input.
-* [Preferences] DefaultFailtype preference reinstated to resolve default fail
- type problems.
-* [TimingData] TimingData::GetReturnsNumbers metric added to make TimingData
- functions return tables of numbers instead of strings.
-
-2014/09/20
-----------
-* [ScreenOptionsCustomizeProfile] New screen added for setting profile stats.
-
-2014/09/13
-----------
-* [Endless] Songs are repicked on each repeat of the course.
-* [GameState] GetCurrentStage logic fixed to correctly return Stage_Final in
- all cases where it should.
-* [JudgmentMessage] Tracks parameter replaced with Notes and Holds parameters.
-* [NumPadEntry] New customizable lua class for custom screens.
-* [ScreenHeartEntry] New screen added to default.
-* [TapNote] Class exposed to lua through JudgmentMessage with all data on the
- TapNote.
-
-2014/09/06
-----------
-* Changed ES/OMES speed mod to 2x from 1.5x.
-* [ActorMultiVertex] GetTexture lua function added.
-* [BitmapText] max_dimension_use_zoom lua function added.
-* [Edit Mode] Swap Up/Down and Arbitrary Remap added to Alter menu.
-* [GameState] InsertCoin and InsertCredit lua functions added.
-* [PrefsManager] FastNoteRendering preference added.
-* [RageTexture] Reload lua function added.
-* [RageTexture?] "__screen__" added as special screenshot texture name.
- Causes a skip.
-* [Screen] SetNextScreenName lua function added.
-* [ScreenCredits] New ScreenCredits. Please update your theme if you applied
- theme changes to this screen.
-* [ScreenMapControllers] Massively changed to make it not suck. New elements,
- new metrics, new actions.
-* [WheelItemBase] IsLoaded lua function added.
-
-2014/08/30
-----------
-* [ActorScroller] wrap parameter added for controlling looping behavior better.
-* Life difficulty matches StepMania 3.9's again.
-
-2014/08/16
-----------
-* [ActorFrame] Internal diffuse and glow now apply to BitmapText children.
-* [GameState] SetCurrentPlayMode and SetCurrentStyle lua functions added.
-* [PrefsManager] BackgroundFitMode preference added to settle all problems
- with how backgrounds are stretched or fit.
-* [ScreenSetBGFit] New screen for presenting the BackgroundFitMode preference.
- See _fallback/BGAnimations/ScreenSetBGFitMode overlay.lua for documentation.
-* [ThemeManager] HasMetric/String now return false when the group name or
- metric name is an empty string.
-
-2014/08/09
-----------
-* [GameManager] GetStylesForGame lua function added.
-* [LifeMeterBattery] CourseSongRewardLives metric added.
-* [LifeMeter] LifeType, DrainType, and BatteryLives moved to PlayerOptions so
- the players can have different settings.
-* [ScreenGameplay] LifeMeterChangedP1 message is no longer broadcast for for
- P2's lifemeter. Use LifeMeterChangedP2. "Life" and "StepsSecond" are passed
- in the params table for the message.
-
-2014/08/02
-----------
-* [MusicWheel] Added GetSelectedSection lua function.
-
-2014/07/26
-----------
-* [ActorScroller] Accidental "permanent loop" bug fixed.
-* [Common metrics] AfterThemeChangeScreen, AfterGameChangeScreen, and
- AfterGameAndThemeChangeScreen optional metrics added to Common section.
-* [GameManager] SetGame lua function added.
-* [Globals] OldStyleStringToDifficulty lua function added.
-* [PrefsManager] SavePreferences lua function added.
- ThreeKeyNavigation preference added.
-* [SoundManager] IsTimingDelayed lua function added.
-* [ThemeManager] SetTheme lua function added.
-* [ScreenHowToPlay] CharacterName metric works again.
-
-2014/07/18
-----------
-* [BitmapText] LoadFont is now obsolete. Set the Font attribute of the
- BitmapText instead.
-* [ErrorReporting] New system that reports theme errors through dialogs and
- an on screen display. (Sorry guys, your themes are all full of errors, and
- you should fix them)
-* [LogDisplay] New actor class used by ErrorReporting, possibly useful more
- widely. See _fallback/Scripts/04 LogDisplay.lua for docs.
-
-2014/07/05
-----------
-* [Actor] GetDestX/Y/Z lua functions added.
-* [Profile] Lua functions for calculating calories based on heart rate added.
- See ThemerDocs/calories.txt
-
-2014/06/28
-----------
-* [ArrowEffects] New namespace of lua functions.
-* [Screen] AddInputCallback and RemoveInputCallback lua functions added.
-
-2014/06/21
-----------
-* [Gameplay] CMods and MMods now automatically compensate for music rate.
-* [Globals] SaveScreenshot lua function added.
-* [ScreenPlayerOptions] ArbitrarySpeedMods system added.
-* [ScreenSelectMusic] Pad codes that set modifiers disabled.
-
-2014/06/07
-----------
-* [ScreenSelectMusic] SelectMenuInput message is now always sent when Select
- is pressed.
-
-2014/05/17
-----------
-* [GameState] StoreRankingName lua function added. Ranking names now allow
- lowercase.
-* [Profile] SetLastUsedHighScoreName and GetHighScoreListIfExists lua
- functions added.
-
-2014/05/10
-----------
-* [Player] Tracks param added to JudgmentMessageCommand. (will change before
- beta 4)
-* [ScreenGameplay] Themable haste system added.
- GetTrueBPS lua function added.
-* [ThemeManager] GetMetricNamesInGroup and GetStringNamesInGroup lua functions
- added.
-
-2014/05/03
-----------
-* [ActorFrame] GetChild and GetChildren modified, see Lua.xml.
-* [NoteSkinManager] GetMetric function added.
-* [PlayerOptions] Entirely new API for setting player options. Superior
- alternative to ApplyGameCommand.
-* [SongOptions] Entirely new API for setting song options. Same design as new
- PlayerOptions API.
-* [NoteField] NoteField Board can now use any AutoActor class instead of just
- Sprite/Sprite-derived ones.
-
-2014/04/26
-----------
-* [Style] GetColumnInfo and GetColumnDrawOrder lua functions added.
-
-2014/04/19
-----------
-* [ActorMultiVertex] New actor class added.
-* [ScreenGameplay] GetHasteRate lua function added. GiveUpSeconds metric added.
-* [SoundManager] StopMusic lua function added.
-
-2014/04/05
-----------
-* [GameState] HaveProfileToLoad/Save and Load/SaveProfiles lua functions added.
-* [ScreenWithMenuElements] StartTransitioningScreen lua function added.
-
-2014/03/22
-----------
-* [Player] HoldNoteScore_MissedHold added.
-
-2014/03/05
-----------
-* [ScreenNetSelectBase] Fix colors when unicode characters are in chat box.
-
-2014/03/08
-----------
-* [ActorScroller] DrawByZPosition fixed for looping ActorScrollers.
-* [Globals?] GetTimeSinceStart global lua function added.
-* [Player] FirstTrack parameter added to JudgmentMessageCommand. (will change
- before beta 4)
-
-================================================================================
-StepMania 5.0 beta 3 | 20140224
---------------------------------------------------------------------------------
-
-2014/02/22
-----------
-* [Actor] texturetranslate lua function added.
-* [BitmapText] distort lua function added.
-* [ComboGraph] Added BodyHeight metric.
-* [GameState] JoinInput lua function added.
-* [PlayerOptions] "resetspeed" mod added.
-* [PlayerStageStats] GetComboList and GetLifeRecord lua functions added.
-* [Preferences] ComboContinuesBetweenSongs preference added.
-* [ScreenWithMenuElements] SetAllowLateJoin lua function added.
-* [SoundManager] loop and applyRate args added to PlayMusicPart lua function.
-* [Sprite] SetCustomPosCoords lua function added.
-* [Utils] XML backwards compatibility added.
-
-2014/02/08
-----------
-* [Actor] Added heading, pitch, and roll lua functions.
-
-2013/10/09
-----------
-* [CombinedLifeMeterTug] Added names and commands to Separator and Frame items.
- [SSC]
-* [MeterDisplay] Added names to Stream and Tip items. [SSC]
-
-2013/10/06
-----------
-* [ScreenOptions] Allow for the use of per-screen Start sounds instead of a forced
- Common Start. [SSC]
-
-2013/10/03
-----------
-* [GameConstantsAndTypes] Declared RankingCategory as a type. [SSC]
-* [Profile] Added GetCategoryHighScoreList(StepsType,RankingCategory) Lua
- binding. [SSC]
-
-2013/09/23
-----------
-* PIUIO: Fix default mapping for lights on five-panel setups.
-
-2013/09/06
-----------
-* Re-implement CustomSpeedMods to use new Lua hooks. Fixes assertion when
- loading SpeedMods.txt from unmounted card.
-* Add Lua hooks for themes to load/save custom data to/from profiles.
-* [Linux] Ignore comments in /etc/fstab.
-
-2013/08/30
-----------
-* Fix editor behavior when deleting/shifting timing changes.
-* Re-enabled "convert to stop/delay" at beat 0.
-
-2013/08/29
-----------
-* Fix hack pertaining to ModIcons and Lua-based option rows.
-
-2013/08/22
-----------
-* [FFmpeg] Fix several video timing issues (delay, stutter, looping) with the
- FFmpeg driver.
-
-2013/08/14
-----------
-* [ThemePrefs] Fix saving of ThemePrefs in default theme.
-
-2013/08/12
-----------
-* [ScreenEdit] Fix Undo for the Alter and Turn commands. Previously, trying
- to undo one of these commands would erase the notes instead. Now it behaves
- as expected.
-
-2013/08/08
-----------
-* [SoundDriver_JACK] New sound driver (experimental!). To use this, specify
- JACK in your SoundDrivers preference, and set SoundDevice to a
- comma-separated list of ports to connect to, for example:
- "SoundDevice=system:playback_1,system:playback_2".
-
-2013/07/18
-----------
-* [ScreenEdit] Display scroll segments in editor and preview for both Song and
- Steps Timing.
-
-2013/07/09
-----------
-* [MemoryCardDriver] Allow Unix fstab to specify memory card devices by alias
- (e.g. /dev/disk/by-path/*)
-
-2013/06/29
-----------
-* [ArchHooks_Unix] Support the GoToUrl function. [phantom10111]
-
-2013/06/18
-----------
-* [InputHandler_DirectInput] Add support for all possible input device types
- under new DirectX library. [Shenjoku]
-* Add --enable-lto option for configure on Linux. [phantom10111]
-
-================================================================================
-StepMania 5.0 beta 2a | 20130616
---------------------------------------------------------------------------------
-
-2013/06/15
-----------
-* Fix some minor DLL issues on Windows. [wolfman2000]
-* Theme updates to make it faster. [Midiman]
-
-2013/06/09
-----------
-* [ScreenJukebox] Check for existing steps when starting jukebox.
-* [ScreenEdit] Fix crash related to keysounds. [wolfman2000]
-
-2013/06/04
-----------
-* Fix theme glitches caused by the change to Home/Free modes.
-* [UnlockManager] Allow entries to be explicitly locked by the theme.
- [wolfman2000]
-
-================================================================================
-StepMania 5.0 beta 2 | 20130602
---------------------------------------------------------------------------------
-
-2013/06/02
-----------
-* Add several video container formats that are supported by FFmpeg: mkv, mp4,
- mov, flv, f4v.
-
-2013/05/31
-----------
-* [ArchHooks_MacOSX] Add per-user folders in ~/Application Support.
-
-2013/05/30
-----------
-* [ScreenSelectMusic] Fix crash when sorting in Oni mode.
-
-2013/05/28
-----------
-* [ActorFrame] Propagate glow and diffuse to children of ActorFrames. This
- should fix any visual problems with layered noteskins and mods.
-
-2013/05/25
-----------
-* Remove the "random" part of the Random Vanish mod to prevent crashing.
- [wolfman2000]
-
-2013/05/21
-----------
-* [MovieTexture_FFMpeg] Fix crashing with large videos.
-
-2013/05/20
-----------
-* [NotesLoaderSM] New algorithm for converting negative BPMs and stops to
- warps, more closely matching the behavior of old StepManias.
-
-2013/03/24
-----------
-* [MusicWheel] Add the ChangeSort method to the Lua interface to allow the
- theme to switch sorting methods.
-
-2013/02/04
-----------
-* [Player] Add a "Column" parameter to the StepMessage to allow the theme or
- chart to discover which column is being triggered.
-* [ArchHooks] Unix: Move UserPackages to Packages in the per-user directory,
- and remove Data from the per-user directory. Users who have installed
- packages to UserPackages will need to migrate them to Packages instead.
-
-2013/02/03
-----------
-* [Player] Fix a stutter that can take place when mines are skipped during
- warp segments. [phantom, wolfman2000]
-
-2013/01/23
-----------
-* [TimingData, ScreenEdit] Fixed behavior in the editor whereby making changes
- to Song Timing would unexpectedly change all charts to Steps Timing.
- (Thanks to DJ OMiY for reporting and isolating the problem.)
-
-2013/01/11
-----------
-* [Screen] Allow overlay screens to accept codes.
-
-2013/01/06
-----------
-* [TimingChanges, ScreenEdit] Fix a bug in the editor where adding BPM changes
- that differ by a very small amount from the previous BPM change were not
- added at all. [vulture/wolfman2000]
-
-2013/01/03
-----------
-* [ScreenGameplayShared] Fix routine mode. [djpohly/FSX/shakesoda/wolfman2000]
-
-================================================================================
-StepMania 5.0 beta 1a | 20121228
---------------------------------------------------------------------------------
-
-2012/12/28
-----------
-* [default] Improved autogen icon and Oni life display. [Midiman]
-* [ScreenSelectMusic] Fix mouse events being eaten. [shakesoda]
-* [ScreenEdit] Remove extra zeroes from editor text entry. [djpohly]
-* [WheelBase] Add WheelBase.Move Lua binding. [shakesoda]
-
-2012/12/27
-----------
-* [default] Various theme improvements. [Midiman]
-* [PlayerStageStats] Restore SetScore and SetCurMaxScore Lua bindings. [shakesoda]
-
-2012/12/26
-----------
-* Code restructuring. [djpohly/wolfman2000]
-
-================================================================================
-StepMania 5.0 beta 1 | 20121225
---------------------------------------------------------------------------------
-
-2012/12/25
-----------
-* [PlayerStageStats] Remove SetScore and SetCurMaxScore Lua bindings. [FSX]
-
-2012/12/24
-----------
-* [ScreenDebugOverlay] Don't reset the gamestate when reloading screens. Reloading
- ScreenSelectMusic or any other screen which relies on that works now. [shakesoda]
-* [RageUtil] Fix math.random() never returning > 0.5. [vyhd]
-
-2012/12/18
-----------
-* [default] Fix Final Stage not appearing on StageInformation if a Long or Marathon song is
- played as the last song. [FSX]
-* [fallback] Add Song:GetStageCost() [FSX]
-
-2012/12/17
-----------
-* [Font] Fix a unicode-related crash which would sometimes happen on SMO. [shakesoda]
-* [GameState] Fix arrow stuttering for cases where you get duplicated values between
- updates. This helped significantly for PulseAudio on Ubuntu 12.04, for me. [shakesoda]
-
-2012/12/13
-----------
-* [RageDisplay_GLES2] Carry over a bunch of functionality from RageDisplay_OGL, still not
- usable however. [shakesoda]
-
-2012/11/26
-----------
-* [ScreenSelectMusic] Only unchoose steps if there are more than 10 seconds on the timer
- to prevent unchoosing steps for an infinite timer. [Marcio Barrientos]
-
-2012/11/22
-----------
-* [ProfileManager] Added SaveProfile, SaveLocalProfile, GetLocalProfileIDs,
- ProfileFromMemoryCardIsNew, GetSongNumTimesPlayed, LocalProfileIDToDir, and
- GetLocalProfileDisplayNames Lua bindings. [Alfred Sorenson]
-* [Profile] Add GetGUID Lua binding. [Alfred Sorenson]
-
-2012/11/13
-----------
-* [RageDisplay_OGL] Try to fix the shader compilation crash once and for all. [shakesoda]
-
-2012/10/31
-----------
-* [RageDisplay_GLES2] Initial GLES2 commit. Not functional. [shakesoda]
-
-2012/10/20
-----------
-* [NotesLoaderSMA] Fix default speed length for SMA files. [Aldo MX]
-* [NotesLoaderSMA] First segment required a zero. [Aldo MX]
-
-
-2012/10/17
-----------
-* [ScreenEdit] Don't allow ratings of 0. [shakesoda]
-
-2012/08/10
-----------
-* [InputHandler_Linux_PIUIO] Add interface to PIUIO kernel module. [djpohly]
-
-2012/08/04
-----------
-* General theme updates: made things faster, title menu updated. [Midiman]
-
-2012/07/26
-----------
-* [ScreenDebugOverlay] Added BackgroundColor metric. [AJ]
-
-2012/07/19
-----------
-* [OptionRow] Set text after running OnCommand so commands like "uppercase,true"
- actually have a chance to work. [AJ]
-
-2012/07/17
-----------
-* [SongManager] Fix a bug where DVNO wouldn't always be gold. [AJ]
-
-================================================================================
-StepMania 5.0 alpha 3 | 20120711
---------------------------------------------------------------------------------
-
-2012/07/11
-----------
-* [ScreenEditMenu] Don't use "Blank" in the description for blank steps;
- use a blank string instead. [AJ]
-
-2012/07/10
-----------
-* [ScreenSelectMusic] Fix an issue where Control+ wouldn't work. [AJ]
-
-2012/07/09
-----------
-* [InputMapper] Use "|" for separating entries instead of ",", since some
- companies have names like "x Ltd., something". [Mordae, AJ]
-
-2012/07/06
-----------
-* [ScoreDisplayRave] Add FrameBase and FrameOver to the metrics. [AJ]
-* [PlayerStageStats] Added GetSongsPassed and GetSongsPlayed Lua bindings. [AJ]
-
-2012/07/05
-----------
-* [ScreenRanking] Added "NextPage" command. "SwitchPage" command is
- now "SwitchedPage". [AJ]
-* [ScreenRanking] Don't clobber alpha values when applying colors in SetPage. [AJ]
-
-2012/07/03
-----------
-* [ScreenHowToPlay] Actually shows notes again. [AJ]
-* [ScreenGameplay] When ShowLifeMeterForDisabledPlayers is true, don't fill up
- life in the meter for the disabled player. (LifeMeterBar only) [AJ]
-
-2012/07/02
-----------
-* [ScreenHowToPlay] Run InitCommand on Characters if enabled. [AJ]
-* [RageUtil] Add detection of ".hg" to StripCvsAndSvn. [AJ]
-
-2012/06/27
-----------
-* [SongManager] Ending a group's name in PreferredSongs with "/*" will now load
- all songs from that group automatically. [AJ]
-
-2012/06/21
-----------
-* [ProfileManager] Added GetPlayerName(pn) Lua binding. [AJ]
-
-2012/06/05
-----------
-* [GrooveRadar] Added SetFromValues(pn,{f1,f2,f3,f4,f5}) Lua binding. [AJ]
-
-2012/06/02
-----------
-* [PrefsManager] Added StretchBackgrounds preference. [AJ]
-* [BMSLoader] Add #banner support. [hanubeki]
- Source: http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=bf8b57b9a662af59de66b9d06ca282f38f9126d9
-
-2012/05/31
-----------
-* [PaneDisplay] Added NullCountString metric. [AJ]
-* [PlayerOptions] Fixes to Get/Set[C, M, X]Mod Lua bindings. [hanubeki]
- Source: http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=97761b5dc87b8c8a1b296985a09814337578c745
-
-2012/05/27
-----------
-* [MusicWheel] Added EmptyColor metric. [AJ]
-* [PlayerState] Enabled GetPlayerController Lua binding.
-
-2012/05/21
-----------
-* [NotesLoaderBMS] Support for #BMP based background changes. [theDtTvB]
-* [SongManager] Add song to the list of songs before loading it, this fixes
- crashes in some BMS files. [theDtTvB]
-* [ScreenEdit] Allow a new way of creating and modifying attacks using the
- Area Menu. Note: Using the C or V keys is no longer allowed for attacks.
- It will simplify things for later. [Wolfman2000]
-* [Steps] Modified HasSignificantTimingChanges; the following now disqualify
- when using a CMod: Stops, Delays, Warps, Speed Changes, Scroll Changes.
- Songs with a non-constant BPM will only disqualify if the High/Low difference
- is greater than 3.00. [AJ]
-
-2012/05/19
-----------
-* [Actor] Made the xy command a source-code level command. [AJ]
-
-2012/05/17
-----------
-* [LoadingWindow_Gtk] Actually resolve the path to the Splash file. [djpohly]
-
-2012/05/16
-----------
-* [ScreenWithMenuElements] Added DelayMusicSeconds metric. [AJ]
-* [ScreenOptionsMasterPrefs] Allow for FastLoadAdditionalSongs preference
- to be called via the "conf" command. [AJ]
-
-2012/05/14
-----------
-* [Course] Added AllSongsAreFixed() Lua binding. [AJ]
-
-================================================================================
-StepMania 5.0 alpha 2 | 20120504
---------------------------------------------------------------------------------
-
-2012/05/03
-----------
-* Add Var "Player" and Var "Controller" for NoteSkin. [hanubeki]
- Sourced from http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=824cff29912d1c29a667046ba463d195e81c524a
-* [CustomSpeedMods] If a player decides to remove 1x from the machine profile's
- custom speed mods, re-add it back in to avoid crashes. [AJ]
-
-2012/05/02
-----------
-* Make ReceptorArrowRow and GhostArrowRow respect the column draw order. [hanubeki]
- Sourced from http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=8ccf7449651eef51e8c42d031aa64da49a0b72ce
-
-2012/04/25
-----------
-* [Profile] Added GetLastPlayedSong and GetLastPlayedCourse Lua bindings. [AJ]
-
-2012/04/22
-----------
-* [LifeMeterBar] Reverted a change from 2010 that messed with how the life meter
- subtracts life. The life difficulty should match StepMania 3.9 again. [AJ]
-
-2012/04/08
-----------
-* [ScreenNetworkOptions] Fixed a bug where localized text would not show up
- properly. Fixes issue 759. [AJ]
-* [Steps, Song] Replace Steps:UsesSplitTiming with
- Song:IsStepsUsingDifferentTiming for both C++ and Lua. [wolfman2000]
-
-2012/04/06
-----------
-* Modify Jousway's planned noteskin to allow it to work with Technomotion
- style gameplay. Expect minor bugs. [Jousway, Wolfman2000]
-
-2012/04/03
-----------
-* [PlayerOptions] Fix setting some effect mods that were always set to Drunk.
- I wonder who had too much to drink. [TaroNuke]
-
-2012/03/31
-----------
-* [GameManager] Allow beat single7 and versus7 to be shown in Demonstration. [AJ]
-
-2012/03/28
-----------
-* [ScoreKeeperRave] Actually handle hold scores in HandleHoldScore().
- Players should please provide feedback on how this affects gameplay, as this
- is a temporary feature. [AJ]
-* [GameConstantsAndTypes] Made StageResult Lua-aware. [AJ]
-* [GameState] Added GetStageResult(pn) Lua binding. [AJ]
-* [Player] Keysounds now respect the volume settings. [hanubeki]
- Sourced from hanubeki-modified-sm-ssc rev. 16fc5b714582
-
-2012/03/27
-----------
-* [ScreenEditMenu] Don't hardcode stopping the music on pressing the back button.
- This interferes with the StopMusicOnBack metric. [AJ]
-
-2012/03/20
-----------
-* [Background] Fix 3D noteskins and dancing characters from clashing with each other. [shakesoda, AJ]
-* [NoteField] Fix 3D noteskins overlapping. [shakesoda, AJ]
-* [ScreenEdit] Don't use Step timing by default. [Midiman]
-* [ScreenEdit] Allow playback of course modifiers in Course Edit mode [Midiman]
-
-2012/03/15
-----------
-* [04 Scoring.lua] Added various 3.9 and 3.9+ scoring methods. [hanubeki]
-
-2012/03/12
-----------
-* Remove libtheora support since ffmpeg already supports theora videos. [cvpcs]
-
-2012/03/10
-----------
-* Update ffmpeg support to v0.10. [cvpcs]
-
-2012/03/09
-----------
-* [PlayerOptions] Don't display x-mods when using m-mods.
- Sourced from hanubeki-modified-sm-ssc rev. bd08a58dd7cf and OpenITG.
-
-2012/03/08
-----------
-* [MusicWheel] Added RouletteStopped message, which is broadcast when Roulette
- is finished and the wheel is locked. [AJ]
-* [WheelBase] Made WheelState a Lua-enabled enum and added
- GetWheelState() Lua binding. Deprecated IsLocked() Lua binding. [AJ]
-
-2012/03/07
-----------
-* [ScreenSelectMaster] Now updates choices on player join; it will move the
- scroller to the correct location, but the GainFocus/LoseFocus commands don't
- seem to work. [AJ]
-
-2012/03/05
-----------
-* [GameCommand] Added GetDifficulty(), GetCourseDifficulty(), GetPlayMode(),
- GetSortOrder(), GetAnnouncer(), GetPreferredModifiers(), and
- GetStageModifiers() Lua bindings. [AJ]
-
-2012/03/04
-----------
-* [Player] Changed default Hold window to 0.250f, like it was in 3.9. [AJ]
-
-2012/03/02
-----------
-* [NotesLoaderBMS] Fix calculating stops, Support for #LNOBJ, Don't use #BACKBMP
- as song background if main StepsType is beat-*. [hanubeki]
- These changes constitute revisions f26caccf103e, 2d114b38c6c9, and b60f021d2b67
- of hanubeki-modified-sm-ssc. (http://code.google.com/r/hanubeki-modified-sm-ssc/)
-
-2012/03/01
-----------
-* [MemoryCardManager] Disable Memory Cards by default. If you want to use them,
-set MemoryCards=1 in Save/Preferences.ini (or Save/Static.ini). [AJ]
-* [GameState] Set Premium to Premium_DoubleFor1Credit by default. [AJ]
-* [ScreenSelectMusic] Added PlaySoundOnEnteringOptionsMenu metric. [AJ]
-* [MusicWheel, WheelBase] Added collapse sound. [AJ]
-
-================================================================================
-StepMania 5.0 alpha 1a | 20120219
---------------------------------------------------------------------------------
-
-2012/02/19
-----------
-* [Style] Added LockedDifficulty() Lua binding. [AJ]
-
-2012/02/15
-----------
-* [HighScore] Added Max Combo, Stage Award and Peak Award. New Lua bindings for
- HighScore: GetMaxCombo(), GetStageAward(), GetPeakComboAward(). [AJ]
- (the specifics of this are subject to change.)
-
-2012/02/10
-----------
-* [WheelBase, WheelItemBase] Turned WheelItemDataType into a Lua type,
- made WheelBase:GetSelectedType() return the enum instead of a number. [AJ]
-
-2012/02/08
-----------
-* [ScreenEdit] Added support for editing keysounds. Use the Area Menu (Enter)
- to either modify what sounds play on that row, or even remove a sound from
- the list. Any sounds assigned to empty notes will automatically become
- an AutoKeysound, and any AutoKeysounds that have their sound removed will
- become empty notes. [Wolfman2000]
-
-2012/02/08
-----------
-* [ScreenOptionsMaster] Added StepsRowLayoutType metric.
- (Valid values are "ShowAllInRow" or "ShowOneInRow".) [AJ]
-
-2012/01/23
-----------
-* [Player] Tap Note Scores (tns) can now be "AvoidMine" or "HitMine" in
-JudgmentMessageCommand. [Saturn2888, shakesoda]
-
-2012/01/15
-----------
-* [WheelNotifyIcon] Add the NumIconsToShow metric. [Wolfman2000]
-* [PlayerOptions] Fix a problem with m-mods where you would get m200 as
- the default speed modifier. [AJ]
-
-2012/01/11
-----------
-* [ScreenEdit] Fix a floating point issue when dealing with speed segments.
- [Wolfman2000]
-
-2012/01/09
-----------
-* [Song] Fix a bug introduced with "Only read certain tags during first load"
- where song graphic files wouldn't load. [theDtTvB]
-
-================================================================================
-StepMania 5.0 alpha 1 | 20120108
---------------------------------------------------------------------------------
-
-2012/01/08
-----------
-* [Song] Add HasPreviewVid and GetPreviewVidPath lua binding [cerbo]
-
-2012/01/08
-----------
-* [ScreenManager] Made AddScreenToTop take a second (optional) parameter for
- posting a ScreenMessage on screen pop. [AJ]
-* Only read certain tags during first load; makes song loading faster. [theDtTvB]
-
-2012/01/07
-----------
-* Fix Portable.ini not working on Mac OS X. [shakesoda]
-
-2012/01/05
-----------
-* [PercentageDisplay] Remove unused ApplyScoreDisplayOptions metric;
- added PercentFormat and RemainderFormat metrics. [AJ]
-* Fix Portable.ini not working in Linux. [FSX]
-
-2012/01/04
-----------
-* Fix a scoring/grading bug with Lifts. [FSX]
-
-2011/12/27
-----------
-* [MusicWheel] Add IsRouletting Lua binding. [AJ]
-* [LuaManager] Remove GetOSName Lua binding; use GetArchName instead. [AJ]
-
-2011/12/26
-----------
-* [ArchHooks_OSX] Worked around a crash when language detection goes wrong.
- Note: a real fix should be looked into. [shakesoda]
-
-2011/12/23
-----------
-* [Song] Fixed a bug where a sample start of 0 wouldn't work. [AJ]
-* [Game] Added CountNotesSeparately and GetMapJudgmentTo(TapNoteScore)
- Lua bindings. [AJ]
-* [StepMania.cpp] Fix initial aspect ratio on first boot, hopefully.
- (See issues 6 and 27) [AJ]
-
-2011/12/22
-----------
-* [LuaManager] Added ProductFamily() Lua binding. [AJ]
-
-2011/12/17
-----------
-* [Various] Allow loading of *.jpeg in addition to *.jpg. [AJ]
-
-2011/12/16
-----------
-* [StreamDisplay] Added VelocityMultiplier, VelocityMin, VelocityMax,
- SpringMultiplier and ViscosityMultiplier metrics. [AJ]
-
-2011/12/12
-----------
-* [ScreenEdit] Add the GAMESTATE:InStepEditor Lua binding. [Wolfman2000]
-* [Player, ScreenGameplay] Allow failing on Oni without crashing. This one
- took awhile. [Wolfman2000]
-* [LifeMeterBattery] Fixed various issues (lives not fully disappearing on fail,
- P2 lose life animation having the wrong x zoom, hide the lives number if it
- falls below 0). [AJ]
-
-2011/12/11
-----------
-* [ScreenEdit] Restore cycling the timing segments for jumping between.
- The required line somehow never got replaced. [Wolfman2000]
-
-2011/11/30
-----------
-* [PlayerOptions] Added IsEasierForSongAndSteps(Song,Steps,PlayerNumber) and
- IsEasierForCourseAndTrail(Course, Trail) Lua bindings. [AJ]
-* [PlayerState] Added GetSuperMeterLevel() Lua binding. [AJ]
-
-2011/11/28
-----------
-* [ScreenGameplay] Add the SurvivalModOverride metric. Let the themer decide
- if mods should be overridden on survival or not. Funny enough, this used
- to be true for the old Oni style mode, but...well, we'll cross that bridge
- later. [Wolfman2000]
-* [LifeMeterBattery] Added MaxLives metric, which limits the maximum amount of
- lives. Setting this to 0 will remove the limit. [AJ]
-
-2011/11/27
-----------
-* [PlayerOptions] Pretty large changes here, namely a bunch of new bindings.
- Fixed the logic for GetReversePercentForColumn; It will now return nil for
- invalid columns. Also fixed the logic for UsingReverse (now checks for 1.0f)
- and SetPassmark (no longer allows values < 0.00f and > 1.0f). [AJ]
-* [ScreenEdit] Allow inserting and removing beats and timing changes in
- specific note increments instead of just quarter notes (a whole beat).
- Those that prefer to keep using the shortcut keys will note that the
- behavior has not changed for that: only by going into the Area menu can you
- deal with more specific changes. [Wolfman2000]
-
-2011/11/26
-----------
-* [ScreenEdit] Restore using F9 and F10 to adjust stops by a fixed amount.
- Sorry for the delay in this. [Wolfman2000]
-* [ScreenEdit] Minor convenience. If you attempt to create a negative stop
- segment from scratch, it does not create, and you are not requested to
- save on exit, for there is nothing to save. [Wolfman2000]
-* [ScreenEdit] Allow Shift + F9/F10 for adjusting delays. This works the same
- way as adjusting stops. [Wolfman2000]
-
-2011/11/25
-----------
-* [PlayerStageStats] Hitting a mine no longer gives you full combo when
- [Gameplay] MineHitIncrementsMissCombo=true. [AJ]
-
-2011/11/24
-----------
-* [PlayerStageStats] Added GetFailed and GetNumControllerSteps Lua bindings. [AJ]
-
-2011/11/15
-----------
-* [LifeMeterBar] Added the ForceLifeDifficultyOnExtraStage metric and
- the ExtraStageLifeDifficulty metric. Let the themer decide if extra stages
- should have their own life bar behavior. Note that this metric does NOT
- change the lifebar to the battery style. [Wolfman2000/FSX]
-
-2011/11/14
-----------
-* [Mac OS X] Restore JPEG functionality. [Wolfman2000]
-
-2011/11/06
-----------
-* [GameState] Add the RefreshNoteSkinData lua binding. This will only
- refresh the NS data for the present game, not all games. [Wolfman2000]
-* [ScreenSelectMusic] Fixed Rave difficulties not being synced on late join.
- Fixes issue 577. [AJ]
-* [GameplayAssist] Don't play sounds if the player is dead. Fixes issue 621. [AJ]
-
-2011/11/04
-----------
-* [ScoreKeeperRave] Revert fix from 2011/10/28. [AJ]
-* [ScoreKeeperRave] Fixed Miss and HitMine giving meter life.
- (Fixes issue 622.) [AJ]
-
-2011/11/02
-----------
-* [ArchHooks] Add the GetArchName lua binding. To the themers that use
- GetOSName, that function may be deprecated in the future. For now,
- both options exist. [vyhd, Wolfman2000]
-
-2011/11/01
-----------
-* [ArrowEffects] Fix Expand, and possibly other mods, from breaking if
- using a second player. [Wolfman2000]
-* [ArchHooks] Add the AppHasFocus lua binding. [vyhd, Wolfman2000]
-
-2011/10/29
-----------
-* [GameState] Add the ResetPlayerOptions lua binding. [Wolfman2000]
-
-2011/10/28
-----------
-* [ScoreKeeperRave] Fix an issue where the super meter would not decrease back
- to 1 after hitting the end of 3. (Fixes issue 314.) [AJ]
-
-2011/10/27
-----------
-* [Default theme] Fixed the pref controlling timing segments on song meter. [FSX]
-
-2011/10/18
-----------
-* [LightsManager] Use song beat for menu button lights, allow demonstration to
- flash pad lights when BlinkGameplayButtonLightsOnNote is true, light custom
- game buttons when pressed during attract mode, general optimizations. [vyhd]
-
-2011/10/17
-----------
-* [ScreenEdit/NoteField] Fix an editor crash when you exit without saving
- after creating new steps. [Wolfman2000]
-
-2011/10/16
-----------
-* [NoteDataUtil] Add the Backwards mod for games where the intended
- definition of Mirror is different. Regarding Pump gameplay, what was
- called Mirror in Preview 4 is considered Backwards now, and the original
- Mirror is back in its old position. [Wolfman2000]
-
-2011/10/12
-----------
-* [Steps] Fix a bug where e.g. ".SM" ".DWI" ".Sm" ".sM" files
- wouldn't properly load since the code was expecting lowercase. [AJ]
-
-2011/10/10
-----------
-* [NotesLoaderBMS] Add the time signature segments. [theDtTvB]
-
-2011/10/09
-----------
-* [NotesLoaderBMS] Fix the bug where keysounds that points to nonexistant file
- gets assigned a random one. [theDtTvB]
-* [NotesLoaderBMS] Use BMSLoader to load PMS files. [theDtTvB]
-* [RageSoundReader_WAV] Fix ADPCM support. [theDtTvB]
-
-2011/10/08
-----------
-* [GameSoundManager] Add the PlayMusicPart lua binding. [Wolfman2000]
-* [ScreenEdit] Add the FadeInPreview and FadeOutPreview metrics. This controls
- how long the fade in and fade outs are for playing the preview music.
- The default values are 0 and 1.5 respectively. [Wolfman2000]
-
-2011/10/07
-----------
-* [RageDisplay] Add the GetFPS, GetVPF, and GetCumFPS bindings. [Wolfman2000]
-
-2011/10/06
-----------
-* Various scoring fixes sourced from http://www47.atwiki.jp/waiei/pages/21.html
- [A.C/@waiei, 桜為å°é³©/@sakuraponila]
-
-================================================================================
-StepMania 5.0 Preview 4 | 20111005
---------------------------------------------------------------------------------
-
-2011/10/04
-----------
-* [NoteDataUtil] More accurate Left, Right, and Mirror mods for Pump gameplay.
- Major thanks to Hudson Felker and Bill Shillito here. [Wolfman2000]
-
-2011/10/01
-----------
-* [ScreenHighScores] Disable forced screen transition behavior when
- ManualScrolling=true. [AJ]
-
-2011/09/30
-----------
-* [GameState] Added CurrentOptionsDisqualifyPlayer(player),
- ApplyPreferredModifiers(player,string) and ApplyStageModifiers(player,string)
- Lua bindings. [AJ]
-
-2011/09/29
-----------
-* [Fallback theme] Fix ImmediateHoldLetGo function. [Wolfman2000]
-* [GameState] Add the EditAllowedForExtra metric. Use this if you want edit
- steps to be allowed for accessing the extra stage. By default, this is
- false. [Wolfman2000]
-
-2011/09/26
-----------
-* [Default theme] Added Song Timing Display user preference. [AJ]
-* [ThemeManager] Add global Scripts dir. [shakesoda]
-
-2011/09/25
-----------
-* [WheelItemBase] Added GetColor and GetText Lua bindings. [AJ]
-
-2011/09/24
-----------
-* [ScreenEdit] Disable shifting timing changes down one beat if starting on
- beat 0. Important information must stay on that beat. [Wolfman2000]
-* [ScreenEdit] Disable converting rows to a stop or beat starting on beat 0.
- There should be no reason for this at this time. [Wolfman2000]
-* [MusicWheelItem] Add/reinstate MusicWheelItem Mode Normal/Color/OverPart. [AJ]
-* [FadingBanner] Added LoadFromSortOrder(SortOrder) Lua binding. [AJ]
-
-2011/09/23
-----------
-* [ScreenEvaluation] Added RollingNumbersMaxComboClass metric. [AJ]
-* [NotesLoaderSM] Fix loading .sm files with non standard difficulty names.
- It should be Hard, not Heavy. [Wolfman2000]
-
-2011/09/22
-----------
-* [ScreenDebugOverlay] Replaced hardcoded toggle command with
- ButtonTextToggledCommand metric. [AJ]
-* [LoadingWindow_Win32] Make the StepMania window gain focus after the
- loading window closes. Fixes issue 424. [AJ]
-
-2011/09/21
-----------
-* [FadingBanner] Added LoadRandom(), LoadRoulette(), LoadFallback(),
- LoadCourseFallback(), and GetBanner(int) Lua bindings. [AJ]
-
-2011/09/18
-----------
-* [Song] Added GetSampleStart() and GetSampleLength() Lua bindings. [Wolfman2000]
-
-2011/09/16
-----------
-* [UnlockManager] Added GetNumLockedSongs() Lua binding. [Wolfman2000]
-* [UnlockManager] Added IsSongLocked() Lua binding. [Wolfman2000]
-
-2011/09/12
-----------
-* [NotesLoaderSSC/WriterSSC] Allow all timing tags regardless of what timing
- is used. [Wolfman2000]
-
-2011/09/11
-----------
-* [ScreenEvaluation] Added "evaluation full combo W1" and
- "evaluation full combo W2" announcer cues. [AJ]
-* [Banner] Added "Banner group fallback" graphic. [AJ]
-
-2011/09/09
-----------
-* [NotesLoaderBMS] Rewrite the BMS loader, should fix issues 430 and 500. [theDtTvB]
-
-2011/09/08
-----------
-* [GameManager] Fix shifting of 2P notes in beat mode. [1a2a3a2a1a]
-
-2011/09/07
-----------
-* [Model] Added GetDefaultAnimation() Lua binding. [AJ]
-* [GameState] Added GetEarnedExtraStage() Lua binding. [AJ]
-
-2011/09/02
-----------
-* [MenuTimer] Added start(), disable() Lua bindings. Also renamed setseconds to
- SetSeconds to match GetSeconds. [AJ]
-* [GameManager] beat "versus" -> "versus5"; fix beat versus7 being "single7". [1a2a3a2a1a]
-
-2011/08/27
-----------
-* Updated libjpeg to 8c.
-* [SongManager] Added GetCoursesInGroup(sCourseGroup,bIncludeAutogen),
- GetSongGroupBannerPath(songGroup), GetCourseGroupBannerPath(courseGroup),
- DoesSongGroupExist(songGroup), DoesCourseGroupExist(courseGroup) and
- GetPopularSongs() Lua bindings. [AJ]
-* [SongManager] Added GetPreferredSortSongs(), GetPreferredSortCourses(courseType,bIncludeAutogen),
- and GetPopularCourses(courseType) Lua bindings. [AJ]
-* [SongManager] Add SongToPreferredSortSectionName(song), WasLoadedFromAdditionalSongs(song),
- and WasLoadedFromAdditionalCourses(course) Lua bindings. [AJ]
-* [CryptManager] Add GenerateRandomUUID() Lua binding. [AJ]
-* [ThemeManager] Added DoesThemeExist(sTheme), IsThemeSelectable(sTheme),
- DoesLanguageExist(sLang), GetCurThemeName(), HasMetric(sGroup,sValue), and
- HasString(sGroup,sValue) Lua bindings. [AJ]
-
-2011/08/23
-----------
-* [Makefile.am] Fixed version date and time handling. [AJ]
-
-2011/08/22
-----------
-* [PrefsManager, X11Helper] Added ShowMouseCursor preference. [AJ]
-* [UnlockManager] Added GetStepOfAllTypes Lua binding. This gets the locked
- Steps for all game types based on the difficulty specified. [Wolfman2000]
-* [UnlockManager] Added requirepasschallengesteps Lua binding. This is more
- self-explanitory: pass challenge to be able to play edits. [Wolfman2000]
-
-2011/08/21
-----------
-* [NotesLoaderSSC] Fix loading pre-split timing files that had blank timing
- tags inside of them. Thanks to Vin.il for the catch. [Wolfman2000]
-* [Song] Added Jacket, CD image (a la early DDR), and Disc (PIU-style) support.
- Added GetJacketPath(), GetCDImagePath(), GetDiscPath(), HasJacket(), HasDisc(),
- and HasCDImage() Lua bindings. [AJ]
-
-================================================================================
-StepMania 5.0 Preview 3 | 20110820
---------------------------------------------------------------------------------
-
-2011/08/20
-----------
-* [PlayerOptions] Add GetMMod() Lua binding. [AJ]
-* [Player] Make keysounds respect volume preference. Fixes issue 344. [AJ]
-
-2011/08/19
-----------
-* [Steps] Add PredictMeter() and GetDisplayBPMType() Lua bindings. [AJ]
-* [Song] Add ShowInDemonstrationAndRanking() Lua binding. [AJ]
-* Turn off Autogen by default. [shakesoda]
-* Disable automatic aspect ratio guessing, default to 854x480
- (16:9 because most newer displays are wide). [shakesoda]
-* Turn on FastLoad and FastLoadAdditionalSongs by default. [shakesoda]
-
-2011/08/18
-----------
-* [RageInput] Added "No input devices were loaded." string to languages. [AJ]
-* [RageInputDevice] Added localized names for InputDeviceState. [AJ]
-* [Course] Add IsPlayableIn(StepsType) and IsRanking() Lua bindings. [AJ]
-* [Trail] Added GetTotalMeter(), GetLengthSeconds(), IsSecret()
- and ContainsSong(song) Lua bindings. [AJ]
-
-2011/08/16
-----------
-* Added PrettyPercent(numerator,denominator) Lua binding. [AJ]
-
-2011/08/14
-----------
-* [Foreground] Restore Foreground Changes for use in gameplay. Note that it
- is recommended to use lua for #FGCHANGES from now on: not all XML changes
- will work. [infamouspat]
-
-2011/08/13
-----------
-* [Theme-side] Added Fancy UI Background preference to Theme Options. [AJ]
-* [LowLevelWindow_X11] Don't force the window into the upper left corner. [ZipFile]
-
-2011/08/07
-----------
-* [LifeMeterBattery] Added LostLife param to LifeChanged message. [AJ]
-* [LifeMeterBattery] Converted LifeMeterBattery lives to an AutoActor. [AJ]
-* [TimingData] Add HasDelays() Lua binding; HasStops() now only checks stops. [AJ]
-* [GameState, SongUtil] Fix Issue 263 by not charging 2x stages for doubles when
- not using joint premium. [AJ]
-* [BeginnerHelper] Made BeginnerHelper run the OnCommand. [AJ]
-* [GameState] add GetExpandedSectionName() Lua binding. [AJ]
-* [ScreenSelectMusic] Added IdleCommentSeconds metric and
- "ScreenSelectMusic IdleComment" announcer sound. [AJ]
-* [NotesLoaderBMS] "Send the actual song file to LoadFromBMSFile in
- BMSLoader::LoadNoteDataFromSimfile instead of the dummy one...
- This fixes the wrong sound issue [423]..." [theDtTvB]
-
-2011/08/06
-----------
-* [NoteSkins/beat/default] Fix Issue 425. [AJ]
-* [ScoreDisplayRave] Allow (Meter/Level)(X/Y) metrics to work again. [AJ]
-
-2011/08/05
-----------
-* [NoteField] Added AreaHighlightColor metric. [AJ]
-
-2011/08/04
-----------
-* [NoteTypes, ScreenEdit] Removed artificial MAX_NOTES_PER_MEASURE limit. [AJ]
-
-2011/08/02
-----------
-* [NotesSSC] Only write timing/attack tags for the step if there is a
- difference from the song. For timing tags, at this time it means that if even
- one tag is different, all tags are written. [Wolfman2000]
-
-2011/08/01
-----------
-* [MusicWheel, RoomWheel] Moved the "- EMPTY -" string to the languages file. [AJ]
-
-2011/07/31
-----------
-* [ScreenGameplay, LyricDisplay] Stop lyrics from animating on failure.
- Fixes issue 298. [AJ]
-
-2011/07/30
-----------
-* [ProfileManager] Fix an issue when deleting recently created profiles. [AJ]
-* Start removing anything related to Guitar mode. This was rushed in, and it
- is not worth us keeping at this time. [Wolfman2000]
-
-2011/07/26
-----------
-* [ScreenEdit] Add a semi working implementation of the often requested
- copy/paste selected timing data feature. This should make it easier for
- some charters. [Wolfman2000]
-
-2011/07/21
-----------
-* [BeginnerHelper] Removed DancePadAngle metric in favor of DancePadOnCommand.
- The same goes for PlayerAngle, dancer rotation is now handled in
- PlayerP1/2OnCommand. [AJ]
-* [Course] Bumped up max edit course title length to 16 (still feels too short).
- Also added #DESCRIPTION tag and Course:GetDescription() Lua binding. [AJ]
-
-2011/07/20
-----------
-* [Win32/CrashHandlerChild] Crashlog and log now open in the player's default
- text editor. Also, the Show Log button works again, including for people using
- Portable.ini. [AJ]
-
-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]
-* [AnnouncerManager] Fixed a bug where no announcers would be loaded. [AJ]
-* Restored the UserPrefAutoSetStyle behavior. [Wolfman2000]
-* [NotesLoaderSMA] Better way of identifying beats and seconds. [Wolfman2000]
-
-================================================================================
-StepMania 5.0 Preview 1a | 20110603
---------------------------------------------------------------------------------
-
-2011/06/03
-----------
-* [LifeMeterBattery] Added LivesLeft param to LifeChanged message. [AJ]
-* [Windows] Set up directories for pictures and app data in their proper
- location. [Henke]
-* [NotesLoaderSM] Fix an Offset load bug. [Wolfman2000]
-
-2011/06/02
-----------
-* [BPMDisplay] Added SetFromSteps Lua binding. [AJ]
-* [ScreenDebugOverlay] Switch the R and T keys to be Volume Down and Up
- respectively. I have to admit, it makes more sense to have volume up be
- on the right instead of the left. [Wolfman2000]
-* [SongManager] Make autogen courses have "Autogen" as the Scripter. [AJ]
-
-2011/06/01
-----------
-* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000]
-* [ScreenEdit] Fix Song Timing behaviors. [Wolfman2000]
-
-2011/05/31
-----------
-* [Player] Added the BattleRaveMirror metric. This determines if Battle and
- Rave mode will have the two players with mirrored charts or not. By default,
- this is set to true, preserving the ITG style behavior. [Wolfman2000]
-* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000]
-
-================================================================================
-StepMania 5.0 Preview 1 | 20110529
---------------------------------------------------------------------------------
-
-2011/05/27
-----------
-* [ScreenEdit] Added the LoopOnChartEnd metric. Once you get to the end of
- the chart while playing it in the editor, this controls whether it loops and
- plays again, or simply stops. By default, this is true, replicating current
- behavior. Set to false to replicate older StepMania behavior. [Wolfman2000]
-
-2011/05/26
-----------
-* [ScoreKeeperNormal] Added the MissComboIsPerRow metric. Similar to the
- ComboIsPerRow metric, this determines how much miss combo is earned on missing
- a row of notes. By default, this is true. Set to false to replicate Pump Pro
- behavior. [Wolfman2000]
-
-2011/05/25
-----------
-* [NotesLoaderSSC/NotesWriterSSC] Added the ScrollSegments. Think BPM change,
- but not. [theDtTvB]
-
-2011/05/23
-----------
-* [Steps] Added the UsesSplitTiming Lua binding. [Wolfman2000]
-
-2011/05/20
-----------
-* [CryptManager] Added SHA1File Lua binding. [AJ]
-
-2011/05/19
-----------
-* [BPMDisplay] Add CourseCycleSpeed metric. [AJ]
-
-2011/05/17
-----------
-* [NotesWriterSM] Write out OpenITG compatible SM files from here on out.
- This includes turning Warps into Negative Stops. For those that wanted
- negative BPMs specifically, my apologies, but stops are easier on math.
- [Wolfman2000]
-
-2011/05/16
-----------
-* [ProfileManager] Added ProfileWasLoadedFromMemoryCard(PlayerNumber)
- Lua binding. [AJ]
-* Added #FAKES to the SSC format. Similar to the fake arrows, these blocks
- prevent all judgments within the range. [Wolfman2000]
-* Changed the syntax of #WARPS slightly. Now the second value is the relative
- distance that is skipped, not the absolute value when you start hitting
- arrows again. [Wolfman2000]
-
-2011/05/15
-----------
-* [ScreenGameplay] Removed hardcoded commands for Debug (give up text) and
- replace them with DebugStartOnCommand, DebugBackOnCommand, and
- DebugTweenOffCommand. [AJ]
-* Added #SPEEDS to the SSC format. This multiplies your scrolling speed during
- gameplay, not replaces it (see mod attacks for replacing). [Wolfman2000]
-
-2011/05/14
-----------
-* [ModIcon] Added StopWords metric. [AJ]
-* [ScreenSelectMaster] Add "ScreenEmpty" param to MenuStartP# when the GameCommand
- doesn't set a screen. [AJ]
-* [StepsDisplay] Added MeterFormatString metric. [AJ]
-* [MusicWheel] Added ShowSectionsInBPMSort and ShowSectionsInLengthSort metrics. [AJ]
-* [ScreenEvaluation] Stop the Bonus bars from overflowing in course modes. [AJ]
-* [Banner] Added ScrollMode and ScrollSortOrder metrics. [AJ]
-
-2011/05/13
-----------
-* Added Split Timing to .SSC files. All older .SSC files and other file
- formats are converted to split timing on cache load. We are no longer bound
- by Song Timing for everything. [theDtTvB, Wolfman2000, TeruFSX]
-
-2011/05/11
-----------
-* [GameSoundManager] Added PlayAnnouncer Lua binding. [AJ]
-* [AnnouncerManager] Add support for "gameplay combo #" for announcer. [AJ]
-
-2011/05/10
-----------
-* [Sprite] Added SetSecondsIntoAnimation Lua binding. [AJ]
-* [BPMDisplay] Added SetFromCourse Lua binding. [AJ]
-
-2011/05/03
-----------
-* [ScreenEdit] Allow changing the Beat 0 Offset, Music Sample Start, and
- Music Sample Length via Edit Song Info menu. [Wolfman2000]
-
-2011/05/02
-----------
-* [ScreenSelectMusic] Added NullScoreString metric. [AJ]
-
-2011/04/17
---------
-* Use lua for all primary score keeping. Course modes right now still use the
- old fashioned system. [TeruFSX, Wolfman2000]
-
-2011/04/09
---------
-* [Player] Force hold judgments to take place before setting the score.
- [theDtTvB]
-
-2011/04/05
---------
-* [NotesLoaderSSC, NotesWriterSSC] Add the #LABELS tag. This is meant for step
- editors to label different parts of their stepcharts. Use Control + , or . to
- jump to different labels made. [Wolfman2000]
-
+StepMania 5 Changelog
+________________________________________________________________________________
+The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes
+from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
+________________________________________________________________________________
+
+2016/06/28
+----------
+* [Gameplay] Moved pause menu logic to a script in _fallback. Added
+ documentation to help other themes implement a pause menu.
+
+2016/06/24
+----------
+* [SelectMusic] Added AllowHoldForOptions preference to disable holding start
+ to go to the player options screen. [kyzentun]
+* [General] Back button will only back out of the screen on a press, not when
+ it is still being held from the previous screen. [kyzentun]
+
+2016/06/12
+----------
+* [ScreenSyncOverlay] Moved actors to lua to make them themable. [kyzentun]
+
+2016/06/09
+----------
+* [Gameplay] Ready and Go announcer sounds no longer play simultaneously. If
+ the Ready animation doesn't exist and the Go animation exists, only the
+ Go announcer sound is played. If neither animation exists, only the Ready
+ announcer sound is played. [kyzentun]
+
+2016/06/07
+----------
+* [NotesWriterSM] Stops, delays, and warps that occur on the same row are now
+ summed correctly. Fixes bug that deleted warps that were on the same row
+ as a stop. [kyzentun]
+* [Sound] Ignore invalid SoundDriver preference. [kyzentun]
+
+2016/06/06
+----------
+* [Language] Traditional Chinese translation added. [ddrtime]
+
+2016/05/25
+----------
+* [MemoryCards] Fixed bug that caused loading profiles from usb drives to
+ crash. [djpohly]
+
+2016/05/20
+----------
+* [Global] Removed UndocumentedFeature lua function because it was just a way
+ to crash with a message. [kyzentun]
+
+
+2016/05/11
+----------
+* [Minimaid] Fixed crash that occurred when the minimaid lights driver was
+ selected, but no minimaid device was connected. [wolfman2000]
+
+================================================================================
+StepMania 5.0.11 | 20160401
+--------------------------------------------------------------------------------
+
+2016/03/22
+----------
+* [Prefs] Added DisableUploadDir preference to skip saving a score entry to
+ Save/Upload every time a song is played. Generating the unique filename
+ can take several seconds when there are years of scores accumulated, and it
+ clutters the disk. This preference defaults to false. [kyzentun]
+
+2016/03/17
+----------
+* [Actor] Added get and set_tween_uses_effect_delta lua functions to make an
+ Actor use the effect clock for tweening. [kyzentun]
+
+2016/03/15
+----------
+* [ProfileManager] Added GetStatsPrefix and SetStatsPrefix lua functions for
+ separating scores into different stats files. [kyzentun]
+ (this is kind of a stop gap, I'd really like to rewrite scoring to save
+ more data so that a score earned with one set of timing windows and weights
+ can be converted to the equivalent score with different timing windows)
+
+2016/03/14
+----------
+* [Online] Stepmania will force disconnection from the SMO server when
+ entering the jukebox or sync calibration screens to avoid crash. [kyzentun]
+
+2016/03/05
+----------
+* [global] get_sound_driver_list lua function added. [kyzentun]
+
+2016/03/02
+----------
+* [Gameplay] Fixed No Fakes mod to remove fakes inside warps. [kyzentun]
+* [Keymaps] Added special name for colon key so it can be bound. [medmig]
+
+2016/02/20
+----------
+* [Language] Bahasa Indonesian translation added to default theme. [JOELwindows7]
+
+2016/02/15
+----------
+* [Input] Linux event devices now start at JOY10 instead of JOY1. Without
+ this change, if one dance pad is a joystick device, and the other is an
+ event device, they will both be JOY1, and stepmania will think they are the
+ same dance pad. If you use Linux, assume that you have to remap your dance
+ pad. [kyzentun]
+
+2016/02/13
+----------
+* [Lights] Minimaid driver added for Linux. This is practically identical to
+ the Windows minimaid driver that pkgingo wrote.
+* [Gameplay] When checking for the first second in a song, AutoKeysound notes
+ are now ignored, being treated as if they were background music. This
+ allows the intro of BMS files to play as soon as ScreenGameplay is loaded,
+ while still having a delay before the real notes come in. [nixtrix]
+
+2016/02/04
+----------
+* [Course] In an Endless course, songs will only be repeated after all songs
+ in the group have been played. [blindbox]
+
+2016/02/03
+----------
+* [ScreenManager] Added PlayInvalidSound, PlayStartSound, PlayCoinSound,
+ PlayCancelSound, and PlayScreenshotSound lua bindings. [kyzentun]
+ Added get_input_redirected and set_input_redirected to allow the theme to
+ disable the normal input functions. (Example: a custom lua menu on
+ Select Music. When the menu is up, the theme doesn't want the player's
+ input to move the music wheel.) This is in SCREENMAN so that it will work
+ on all screens. [kyzentun]
+* [ScreenSelectMusic] Added CanOpenOptionsList lua binding. OpenOptionsList
+ will do nothing if CanOpenOptionsList returns false. [kyzentun]
+
+2016/01/18
+----------
+* [Edit Mode] Added "Clear timing in region" to timing menu. [kyzentun]
+ Fixed crash that occurs when "Paste timing data" is used after copying a
+ region of timing data that only contains stops. [kyzentun]
+
+2016/01/14
+----------
+* [Gameplay] Added pause menu to default theme. Activated by pressing
+ Select, or Back twice without pressing something else. Has options for
+ restarting or forfeiting the current song in normal play. Course mode has
+ options for skipping the current song or ending the course or forfeiting.
+ [kyzentun]
+* [Graphics] When fetching the list of resolutions, only 32bpp modes are
+ tested because less than 32bpp is not supported on Windows 8 and newer, and
+ because the bpp doesn't matter when fetching a list of resolutions. This
+ speeds up the load time of the Graphics/Sound option screen. [kyzentun]
+
+2016/01/10
+----------
+* [RageFile] Lua functions for RageFile should now emit an error when the
+ file was not opened correctly instead of crashing. [kyzentun]
+
+2016/01/05
+----------
+* [Linux] Disable DPMS on startup and restore setting on exit. [kyzentun]
+
+2015/12/27
+----------
+* [RageFileManager] Ignore OS X special files in GetDirListing. [kyzentun]
+
+2015/12/20
+----------
+* [Fonts] Fixed crash bug in Texture Font Generator. [drewbarbs]
+
+2015/12/16
+----------
+* [Player] ChangeLife and SetLife functions added. [kyzentun]
+
+2015/12/13
+----------
+* [popn] Judgment levels in popn game mode now use W1 to W5. [parashep]
+
+2015/12/05
+----------
+* [Player] Guitar mode cruft removed from Player. [tertu]
+
+2015/12/04
+----------
+* [NoteField] Changed DrawBeatBar to check the M-mod so that smaller beat
+ bars are drawn when M-mods are used in edit mode. [kyzentun]
+
+2015/11/09
+----------
+* [Gameplay] BG Brightness is no longer forced to 100% on songs that only
+ have a beginner chart. [kyzentun]
+
+2015/11/08
+----------
+* [ScreenSelectMusic] Using lua music files for the section music and similar
+ things works now. [kyzentun]
+
+2015/11/05
+----------
+* [PlayerOptions] Fixed bug that was clearing the noteskin back to default.
+ [kyzentun]
+
+================================================================================
+StepMania 5.0.10 | 20151031
+--------------------------------------------------------------------------------
+
+2015/10/29
+----------
+* [Language] French translation updated. [Arvaneth]
+
+2015/10/27
+----------
+* [Compiling] Link with /MT on windows instead of /MD. [wolfman2000]
+* [Fonts] Put Texture Font Generator back in package. [wolfman2000]
+ Build Texture Font Generator when WITH_FULL_RELEASE or
+ WITH_TEXTURE_GENERATOR is enabled. [wolfman2000]
+
+2015/10/26
+----------
+* [Song] Added GetMainTitle lua function for bypassing ShowNativeLanguage
+ preference. [kyzentun]
+
+2015/10/25
+----------
+* [Compiling] Number of jobs used when building ffmpeg can be customized by
+ WITH_FFMPEG_JOBS. [wolfman2000]
+ Appveyor support added for automated windows building. [wolfman2000]
+
+2015/10/23
+----------
+* [BMS] Fixed crash when an unknown type chart was in a bms. [kyzentun]
+
+2015/10/21
+----------
+* [Actor] Changed PlayCommandNoRecurse so that setting a theme metric to a
+ function that doesn't exist doesn't emit an error. [kyzentun]
+* [Compiling] Allow WITH_MP3=Off and WITH_WAV=Off to compile. [wolfman2000]
+* [EditMode] Fixed crash on missing ScreenMiniMenuTimingDataChangeInformation
+ metrics. [kyzentun]
+* [ScreenEvaluation] Changed assert that occurs when leaving ScreenGameplay
+ with SM_GoToNextScreen to give more info. [kyzentun]
+
+2015/10/20
+----------
+* [Compiling] Fixed cmake error when compiling with -DWITH_SSE2=off. [wallacoloo]
+ Don't define CPU_X86 on non-x86. [wallacoloo]
+* [Noteskins] If the fallback for a noteskin is not found, that noteskin is
+ not loaded, to prevent picking it and crashing. [kyzentun]
+
+2015/10/18
+----------
+* [BitmapText] Added set_mult_attrs_with_diffuse lua function. [kyzentun]
+
+2015/10/17
+----------
+* [Course] Fixed loading of courses that use WORST entries. [wolfman2000]
+* [SextetStream] SextetStream stuff is now in all platforms. [wolfman2000]
+
+2015/10/15
+----------
+* [BMS] Changed bms loading so that iidx bms files aren't loaded as kb7.
+ [zardoru]
+
+2015/10/12
+----------
+* [ActorMultiVertex] Fixed bug that *sometimes* caused diffuse to be applied
+ to verts wrong. [kyzentun]
+
+2015/10/11
+----------
+* [Song] Changed song loading to allow a song to have a blank MusicFile field
+ if the song has any keysounds. A blank MusicFile entry can result from
+ having '#' in the music file name, or be intended for bms files. Do not use
+ '#' in any fields, the .sm and .ssc file formats do not support it. The
+ engine has to detect that the field was loaded blank and look through the
+ song folder to figure out what was supposed to be there. [kyzentun]
+
+2015/10/09
+----------
+* [Edit Mode] Changed Current Second field to not have the global offset
+ added in. People were using one global offset for syncing to workaround
+ the problem and sync by comparing the Current Second in Edit Mode to the
+ current second in a music editor. The workaround of using a different
+ global offset for syncing should no longer be necessary. [kyzentun]
+* [Input] Fixed input lockup caused by scrolling the mouse wheel. Why wasn't
+ this reported sooner? [kyzentun]
+
+2015/10/07
+----------
+* [ActorFrame] ActorFrame:SetDrawByZPosition now returns self. Missed a spot
+ when implementing function chaining. [kyzentun]
+* [Gameplay] MaxRegenComboAfterMiss preference brought in. When a step is
+ missed in gameplay, the combo has to get back up to RegenComboAfterMiss
+ before the player starts regaining life. If MaxRegenComboAfterMiss is
+ greater than RegenComboAfterMiss, then each successive miss increases
+ RegenComboAfterMiss until it reaches RegenComboAfterMiss.
+ MaxRegenComboAfterMiss defaults to 5, the same as RegenComboAfterMiss, so
+ there should be no behavior change unless the preference is manually
+ changed. [dbk2]
+* [Gameplay] When disqualification was turned on via Preferences, the old
+ logic exhibited two problems:
+ 1. charts with attacks were always disqualified from ranking
+ 2. charts without attacks could be disqualified from ranking if the attack
+ modifier was set to "Off"
+ So, this commit fixes those problems. If a chart has attacks, and the
+ attack modifier is used to turn them "Off", then disqualification is
+ enforced.
+ Additionally, disqualification is enforced if the attack modifier is set to
+ "Random Attacks." This part might not be necessary, but I acted on the
+ assumption that random attacks could theoretically make a chart easier.
+ [dbk2]
+
+2015/10/04
+----------
+* [FFmpeg] Upgrade FFmpeg to 2.1.3 for Windows. [wolfman2000]
+* [FFmpeg] Fixed cmake WITH_SYSTEM_FFMPEG option. [lthls]
+
+2015/10/03
+----------
+* [FFmpeg] Upgrade FFmpeg to 2.1.3 for Mac OS X. [wolfman2000]
+* [Gameplay] Fixed timing to apply the current music rate to the global
+ offset so that playing at different music rates doesn't make a chart off
+ sync. [Matt McCutchen]
+
+2015/10/02
+----------
+* [Edit Mode] .sm files will no longer be saved when split timing is used
+ because per-chart timing cannot be done in the .sm format. [kyzentun]
+* [Scoring] Fixed bug that caused missed holds to be recorded as held in the
+ value returned by PlayerStageStats:GetRadarActual(). [kyzentun]
+
+2015/09/21
+----------
+* [Sprite] Added set_use_effect_clock_for_texcoords for toggling whether the
+ tex coord velocity uses the effect clock instead of the time.
+
+2015/09/10
+----------
+* [MusicWheel] Fixed SetItemPosition so that it actually passes the item
+ index and the number of items to the transform function. [kyzentun]
+
+2015/09/09
+----------
+* [Notefield] Fixed bug where the hold body doesn't scroll if it goes off the
+ top of the screen. [waiei]
+
+2015/09/08
+----------
+* [Compiling] Compiling stepmania on Windows with the locale set to Japanese should work now. [wolfman2000]
+
+2015/09/06
+----------
+* [Preferences] Fixed crash on Advanced Input Options on OS X caused by the
+ Axis Fix preference not existing on OS X. The preference does nothing on
+ OS X, but the game no longer crashes on that screen. [kyzentun]
+
+2015/09/03
+----------
+* [Fonts] Respliced large kanji sprite sheets from 32x106 and 32x61 to 63x54
+ and 48x41 to bring them under 4096 pixels tall, which was causing a forced
+ resize and slowing down loading time. [kyzentun]
+* [Gameplay] Fixed song position updating logic so that the
+ ScreenGameplay:PauseGame lua function actually pauses the game. Start,
+ Select, and Back are all used for different ways of giving up, so the
+ feature remains unused in the default theme. [kyzentun]
+
+2015/09/02
+----------
+* [Gameplay] Fixed Player logic that spammed TNS_AvoidMine repeatedly. [kyzentun]
+
+2015/08/29
+----------
+* [Edit Mode] Fixed crash on entering edit mode caused by entering edit mode
+ as Player 2. Edit Mode only works as Player 1. [kyzentun]
+
+2015/08/23
+----------
+* [BMS] Added myo2 channel layout and kb7 charts. Added preview point and
+ fixed offset support and linear solo bms layout. [zardoru]
+* [Linux] Symbolic links will be followed to find the actual executable dir. [Wallacoloo]
+
+2015/08/20
+----------
+* [Minimaid] Minimaid support built in by default instead of off by default. [wolfman2000]
+* [Options] Put AllowExtraStage on Advanced Options screen in default. [kyzentun]
+
+2015/08/19
+----------
+* [Gameplay] RandomBGEndsAtLastBeat metric defaults to true to be similar to
+ old behavior. [wolfy852]
+
+2015/08/08
+----------
+* [General] When the HighResolutionTextures preference is set to Auto,
+ StepMania checks whether the display height is greater than the theme
+ height instead of whether it's greater than 480. [shakesoda]
+
+2015/08/04
+----------
+* [PIUIO] Only send LightState changes to PIUIO when there is a change. [dbk2]
+
+2015/08/02
+----------
+* [NoteField] Fixed bottomcap when NoteDisplay is zoomed out. [hanubeki]
+
+2015/07/22
+----------
+* [Compiling] Fixed building on 32bit linux. [kyzentun]
+
+2015/07/19
+----------
+* [Pump] Added TimingWindowSecondsCheckpoint for the timing window that
+ checkpoint holds allow you to release for. [wolfman2000]
+
+2015/07/18
+----------
+* [General] Fixed bug that skipped notes on beat 0 in score. [kyzentun]
+
+2015/07/16
+----------
+* [ActorUtil] ActorUtil.ResolvePath and ResolveRelativePath now take a
+ boolean flag to tell if the thing is optional. [kyzentun]
+* [CryptMan] Fixed bug that clipped hash strings with zeros. [kyzentun]
+
+2015/07/15
+----------
+* [Sprite] Sprite now executes the AnimationFinished command when it reaches
+ the end of its animation and starts over. [kyzentun]
+
+2015/07/11
+----------
+* [ScreenMapControllers] If the AutoDismissWarningSecs metric is less than
+ .25 seconds, the warning will not be shown (the TweenOn command for it will
+ not be played). Instead, the NeverShow command will be played. If the
+ NeverShow command does not exist for the warning actor, the warning actor
+ will be set to hibernate forever. [kyzentun]
+
+2015/07/02
+----------
+* [Gameplay] Random background video behavior is now controlled by these
+ three metrics in the Background section:
+ RandomBGStartBeat sets the beat of the music the first random bg occurs on.
+ RandomBGChangeMeasures sets the number of measures between changes.
+ RandomBGChangesWhenBPMChangesAtMeasureStart toggles the behavior in its name.
+ RandomBGEndsAtLastBeat toggles the behavior in its name.
+
+================================================================================
+StepMania 5.0.9 | 20150520
+--------------------------------------------------------------------------------
+
+2015/06/10
+----------
+* [global] get_music_file_length lua function added. [kyzentun]
+ multiapproach lua function now takes an optional 4th argument to multiply
+ the speeds by. [kyzentun]
+* [NoteDisplay] 1px seam in hold cap rendering fixed. [A.C/waiei]
+* [RageSound] get_length lua function added. [kyzentun]
+
+2015/06/06
+----------
+* [ScreenInitialScreenIsInvalid] Error screen for themes that set an invalid
+ initial screen. [kyzentun]
+
+2015/06/05
+----------
+* [global] update_centering lua function exposed. [kyzentun]
+* [ScreenOverscanConfig] New screen in _fallback for interactively adjusting
+ the preferences that already existed for dealing with overscan. [kyzentun]
+* [Actor] BlendMode_Subtract no longer crashes on the d3d renderer. It does
+ not do subtraction blending correctly, this just prevents the crash.
+ [kyzentun]
+
+2015/06/03
+----------
+* [Actor] bounce and bob effects no longer round pixel coords. [kyzentun]
+* [RageFile] Exposed Flush function to Lua. [kyzentun]
+
+2015/05/29
+----------
+* [OptionsList] The OptionsListQuickChange, OptionsListLeft, and
+ OptionsListRight messages now have a Selection parameter that has the id of
+ the selection the player moved to. [nixtrix]
+
+2015/05/24
+----------
+* [Gameplay] Autokeysounds are no longer twice as loud when playing
+ keysounded charts with two players. [nixtrix]
+
+2015/05/15
+----------
+* [BMS] .lua files defined in the #BMP tags now work as BG animations, and the
+ #difficulty tag is now supported. [nixtrix]
+* [general] BackInEventMode code now works when called from either player.
+ [nixtrix]
+* [cmake] JACK is now properly found by CMake.
+* [theme] Preview music fadeout time is now adjustable by the metric
+ SampleMusicFadeoutSeconds. [nixtrix]
+* [Song] Setting a sample length of 0 uses the length of the entire preview
+ file. [nixtrix]
+
+================================================================================
+StepMania 5.0.8 | 20150510
+--------------------------------------------------------------------------------
+
+2015/05/10
+----------
+* [General] Screenshots are not tagged with song title or screen name because
+ this causes problems when titles have UTF8 or slashes. [kyzentun]
+
+2015/05/09
+----------
+* [general] Workaround for the axis problem added. Set the Axis Fix
+ preference under Input Options to true if you have the axis problem.
+ [Fighter19]
+* [general] Added XML to Lua converter. See Docs/Themerdocs/XmlToLua.txt for
+ details. [kyzentun]
+
+2015/05/08
+----------
+* [compiling] Added -DWITH_CRYSTALHD_DISABLED cmake options to allow more
+ users to build on Linux. [wolfman2000]
+
+2015/05/05
+----------
+* [Gameplay] Holding Select on gameplay now skips the current song in course
+ or endless mode. [kyzentun]
+
+2015/04/30
+----------
+* [beat] Default key configuration slightly tweaked, space is now the
+ default scratch key, key7 is now mapped to right instead of key3.
+ Backwards and shuffle chart mods now ignore the scratch column. [jobn]
+
+2015/04/27
+----------
+* [general] "Do not show again" button on missing texture dialog works now.
+ If the background or banner file for a song doesn't exist when the song is
+ cached, the cache file will have a blank path so Stepmania won't try to
+ load the nonexistent banner or background.
+
+2015/04/25
+----------
+* [General] Screenshot key now checks whether there is a current song, and
+ puts the song title and current screen name in the screenshot filename. [kyzentun]
+
+2015/04/24
+----------
+* [Gameplay] Toasty animation can now occur multiple times during gameplay. [kyzentun]
+
+2015/04/23
+----------
+* [ServiceMenu] Entries in service menu rearranged to hopefully organize them
+ better. ScreenOptionsInputSub and ScreenOptionsDisplaySub added. Updating
+ a theme to show the options for the new screens should be a simple matter of
+ changing the LineNames entry for ScreenOptionsService to include
+ "InputOptions" and "SoundGraphics". [tuxdude]
+
+2015/04/18
+----------
+* [EditMode] Fixed bug that made alter menu choices prompt for clearing. [kyzentun]
+* [NoteColumnRenderer] Added handling for diffuse and glow to make rainbow
+ and related effects work. [kyzentun]
+
+2015/04/15
+----------
+* [compiling] -DWITH_LIBVA option added to cmake building to fix compiling
+ problems for some linux users. [wolfman2000]
+
+2015/04/14
+----------
+* [SelectMusic] Disabled late join on Extra Stage to prevent crash on
+ Evaluation Summary. [kyzentun]
+
+2015/04/13
+----------
+* [EditMode] Fixed Revert From Disk to actually work. [kyzentun]
+* [japanese] Language update from hanubeki. [hanubeki]
+
+2015/04/11
+----------
+* [dev] cpack support for installing. [wolfman2000]
+* [TimingData] Fixed bug that made steps on the same row as a stop and a bpm
+ change unhittable. [kyzentun]
+
+2015/04/10
+----------
+* [Profile] Kluged together a fix for scores on edit charts not being loaded
+ until after the chart is played. [kyzentun]
+
+2015/04/08
+----------
+* [ActorSound] IsAction attribute added. get/set_is_action functions added.
+ [kyzentun]
+* [GameSoundManager] is_action arg added to PlayOnce. [kyzentun]
+
+2015/04/06
+----------
+* [global] rec_print_children and rec_print_table lua functions added to
+ _fallback. [kyzentun]
+* [Language] Dutch translation updated. [Thumbsy]
+* [RadarValues] Stream, Voltage, Air, Freeze, and Chaos are no longer capped
+ at 1. Stream and Voltage no longer count hold heads twice.
+ RadarCategory_Notes added, which counts all notes.
+ Scoring bug fixes related to radar calculation. [kyzentun]
+* [ScreenSelectGame] Exit option returns to ScreenOptionsService unless the
+ game type actually changed. [Wallacoloo]
+
+2015/04/04
+----------
+* [EditMode] Added submenus to the timing edit menu to allow shifting,
+ copying, and pasting any or all timing segments in the selected region or
+ after the current cursor position. [kyzentun]
+ Shifting menus in edit mode now have choices for 1, 2, or 4 measures or 2
+ beats. [kyzentun]
+* [global] Fixed crash on OS X for certain dance pads when in Japanese
+ locale. [Wallacoloo]
+
+2015/04/03
+----------
+* [ScreenGameplay] The NoteField board is now underneath everything except
+ the backgound. This means underneath any custom actors on the underlay or
+ overlay or decoration layers, and also underneath the combo/judgment even
+ when the ComboUnderField metric is true. [kyzentun]
+ Fixed bug in screen filter in default theme that made it not appear under
+ the field when a solo file was played without Center1Player. [kyzentun]
+
+2015/04/02
+----------
+* [global] commify function exposed to lua. [kyzentun]
+
+================================================================================
+StepMania 5.0.7 | 20150401
+--------------------------------------------------------------------------------
+
+2015/03/30
+----------
+* [Select Music] Ctrl+Shift+R mapped to reload the current song. [kyzentun]
+* [Song] ReloadFromSongDir lua function exposed. [kyzentun]
+* [Preferences] NeverCacheList preference added. It's a comma separated
+ list of group names, if a song is in one of the named groups, it is never
+ cached. [kyzentun]
+
+2015/03/27
+----------
+* [Select Music] Ability to delete the current song by pressing Ctrl+Backspace added. [Wallacoloo]
+
+2015/03/24
+----------
+* [Sprite/RageTexture] GetTexturePath moved to RageTexture and renamed to
+ GetPath. [kyzentun]
+
+2015/03/22
+----------
+* [Dev] Primary build method of all platforms changed to CMake. People
+ building from source must install CMake (min 2.8.12) and read
+ Build/README.md for building instructions. [wolfman2000]
+
+2015/03/18
+----------
+* [OSX] Empty Stepmania directory created on desktop removed. [dguzek]
+
+2015/03/17
+----------
+* [ActorFrameTexture] Example added to Themerdocs/Examples/Example_Actors/.
+ Crash fixes for AFTs. [sigatrev]
+
+2015/03/15
+----------
+* [Sprite] GetTexturePath added. [kyzentun]
+
+2015/03/12
+----------
+* [Language] Docs/Changelog_language.txt added for tracking language changes.
+
+=======
+================================================================================
+StepMania 5.0.7rc | 20150309
+--------------------------------------------------------------------------------
+
+2015/03/09
+----------
+* [EditMode] Autosave every 5 minutes added. [kyzentun]
+* [General] NotesLoaderSM, NotesLoaderSSC, IniFile::ReadFile rewritten,
+ load times substantially faster. [kyzentun]
+* [Preference] HarshHotLifePenalty preference added, for toggling whether
+ LifeMeterBar takes away .1 life when it's full. [kyzentun]
+
+2015/03/08
+----------
+* [EditMode] Clearing an area now prompts for confirmation if it contains
+ EditClearPromptThreshold notes or more. EditClearPromptThreshold is a
+ preference that can be set in the Advanced Options section, or in the
+ options in Edit Mode. [kyzentun]
+
+2015/03/05
+----------
+* [Graphics] DX9 support improved, giving a large speed boost and fixing the
+ problem that made people get stuck with 16bit color. [xwidghet]
+
+2015/03/04
+----------
+* [Loading] The song length from the cache is used now. This cut loading time
+ by 30% for kyz. [kyzentun]
+
+2015/03/02
+----------
+* [Song] Per-chart music feature added. Each chart can have a MUSIC tag.
+ [kyzentun]
+
+2015/03/01
+----------
+* [SelectMusic] Select Music now plays music file named by #PREVIEW tag if
+ it's not blank, instead of using the song file for the sample music. The
+ sample length is read from the preview file. The sample start is treated as
+ 0. [kyzentun]
+* [Song] GetPreviewMusicPath added. [kyzentun]
+* [foreach] foreach_ordered lua function now works on tables that have both
+ number and string keys. Number keys are iterated over first. [kyzentun]
+
+2015/02/28
+----------
+* [General] Pause/Break key now toggles "action" sounds off or on. There is
+ also a button in the F3 debug menu (press A, there are so many that it is
+ off the bottom) for people that don't have a Pause/Break key. [kyzentun]
+
+2015/02/27
+----------
+* [ActorFrame] Fixed RemoveChild and RemoveAllChildren lua functions to
+ delete the children instead of leaking memory. [kyzentun]
+* [Font] Asserts and other things that caused Stepmania to crash on font
+ mistakes now emit non-fatal errors. [kyzentun]
+
+2015/02/26
+----------
+* [PaneDisplay] Changed to print an error when metrics or player number are
+ omitted instead of crashing. [kyzentun]
+* [Screen] Fixed crash when AddInputCallback is passed nil. [kyzentun]
+
+2015/02/22
+----------
+* [BitmapText] Place characters of right-to-left alphabets correctly.
+ (untested) [roothorick]
+
+================================================================================
+StepMania 5.0.6 | 20150217
+--------------------------------------------------------------------------------
+
+2015/02/16
+----------
+* [EditMode] Fixed mistake in TimingData that broke editing bpms. [kyzentun]
+ Fixed crash when deleting steps. [kyzentun]
+* [InputMapper] Backslash can be mapped now. [kyzentun]
+
+================================================================================
+StepMania 5.0.5 | 20150214
+--------------------------------------------------------------------------------
+
+2015/02/12
+----------
+* [InputMapper] Added D-Force Automappings [shakesoda]
+
+2015/02/04
+----------
+* [ActorFrame] GetUpdateRate added. [kyzentun]
+* [Background] Using the wrong transition name no longer crashes.
+ Playback rate is applied to videos.
+ Checkerboard and other BackgroundEffects that use the same file twice no
+ longer play videos back at multiplied speed. [kyzentun]
+* [Sprite] Get/SetDecodeMovie added. [kyzentun]
+
+2015/02/03
+----------
+* [MusicWheel] HideActiveSectionTitle metric added. [djpohly]
+
+2015/02/02
+----------
+* [ActorMultiVertex] ForceStateUpdate and Get/SetDecodeMovie added. [kyzentun]
+* [RageTexture] GetWidth and Height functions added.
+ ( means Source, Texture, or Image) [kyzentun]
+* [Scripts] find_missing_strings_in_theme_translations function added to
+ _fallback scripts to assist translators in finding what needs to be
+ translated. If you need/want to run it on your them, write a piece of lua
+ like this:
+ find_missing_strings_in_theme_translations("_fallback", "en.ini")
+ The first arg is the folder name of the theme to look at.
+ The second arg is the name of the language that is fully translated. All
+ other languages will be compared to it to decide what is missing or unused.
+ [kyzentun]
+* [Song] GetBGChanges added. [kyzentun]
+
+2015/02/01
+----------
+* [ActorMultiVertex] Animation state system added. AMVs can now have
+ animated textures controlled by states written in lua. [kyzentun]
+
+2015/01/31
+----------
+* [EditMode] Want more lead in time before recording starts?
+ It's a preference. [kyzentun]
+
+2015/01/30
+----------
+* [Actor] Wrapper states added. This makes wrapping an Actor inside an
+ ActorFrame for any reason unnecessary, and makes it possible to do things
+ that were only possible by wrapping an Actor in an ActorFrame to Actors
+ that you couldn't put inside a frame before. [kyzentun]
+
+2015/01/20
+----------
+* [ScreenSelect] ChoiceNames can be a lua command that is evaluated to get a
+ list of the gamecommands. The main use of this is to get rid of the huge
+ list of metrics that ScreenSelectStyle requires. A single lua function
+ instead of a metric for every style for every game type. [kyzentun]
+* [ScreenSelectMaster] IconChoicePosFunction metric added. This metric is
+ optional, if it's set, it must be set to a function that returns a table
+ of positions. Each position is a table of the form "{x, y, z}", where x,
+ y, and z are numbers and any that is not a number defaults to 0.
+ The function is passed the number of choices for the screen.
+ IconChoiceOnCommand and IconChoiceOffCommand metrics added so each choice
+ doesn't require its own On/OffCommand pair. These are also optional, but
+ if they are set, they will override the individual commands if they exist.
+ (If "IconChoiceCactusOnCommand" and "IconChoiceOnCommand" both exist,
+ "IconChoiceOnCommand" will be used.) [kyzentun]
+ Example:
+ # in metrics.ini
+ IconChoicePosFunction=choice_positions
+ -- In a file in Scripts/
+ function choice_positions(count)
+ local ret= {}
+ for i= 1, ret do ret[i]= {i*24, i*48} end
+ return ret
+ end
+
+2015/01/16
+----------
+* [ScreenSelectMusic] HardCommentMeter metric added. Sets the meter that
+ will trigger the "select music comment hard" announcer sound. [kyzentun]
+
+2015/01/12
+----------
+* [ScreenOptions] GetNumRows function added. [kyzentun]
+
+2015/01/09
+----------
+* [Sprite] SetStateProperties function added. [kyzentun]
+
+2015/01/06
+----------
+* [ActorMultiVertex] GetSpline and SetVertsFromSplines functions added.
+ [kyzentun]
+* [NoteColumnRenderer] Functions for fetching the spline handlers for the
+ column added. [kyzentun]
+* [NCSplineHandler] New class for setting various parameters of a spline used
+ by a NoteColumnRenderer and containing the spline. [kyzentun]
+* [CubicSplineN] New class that provides spline functionality. [kyzentun]
+
+2014/12/26
+----------
+* [NoteField] Columns turned into actors that can be fetched with
+ get_column_actors. [kyzentun]
+ Tiny boost in fps when there is a large number of notes on screen.
+* [NoteColumnRenderer] New class for controlling one column. [kyzentun]
+
+2014/12/20
+----------
+* [Preferences] AllowMultipleHighScoreWithSameName, ComboContinuesBetweenSongs
+ Disqualification, FailOffForFirstStageEasy, FailOffInBeginner,
+ LockCourseDifficulties, InputDebounceTime, MaxHighScoresPerListForMachine,
+ and MaxHighScoresPerListForPlayer added to service options.
+ InputDebounceTime is in Input Options, the rest are in Arcade Options.
+ (might not show up in themes that customize the order and placement of the
+ preferences) [kyzentun]
+
+2014/12/18
+----------
+* [Profile] GetTotalDancePoints added. [kyzentun]
+
+2014/12/10
+----------
+* [EditMode] Play whole song and play from current beat will now play until
+ either the music or the notes end, whichever is greater. [kyzentun]
+ The screens used for setting the options used to play the screen and for
+ adding attacks can be set through the "OptionsScreen" and "SetModScreen"
+ metrics in the ScreenEdit section.
+* [GameState] ApplyPreferredSongOptionsToOtherLevels function added. [kyzentun]
+* [Player] "ComboBreakOnImmediateHoldLetGo" theme metric added. [sillybear]
+* [PlayerState] ApplyPreferredOptionsToOtherLevels function added. [kyzentun]
+
+2014/12/07
+----------
+* [Game] GetSeparateStyles function added. Use this to detect whether a game
+ allows the players to play different styles. [kyzentun] (used by kickbox)
+* [GameManager] Lua Scripts/ folders are now reloaded when the Game mode is
+ changed. [kyzentun]
+* [GameState] CanSafelyEnterGameplay function added. [kyzentun]
+ In kickbox game mode, players can have different styles set, pass a
+ PlayerNumber when using SetCurrentStyle or GetCurrentStyle.
+* [kickbox] New game mode with 4 styles. [kyzentun]
+* [ScreenGameplay] Notefield positioning is handled a bit differently now.
+ See comments in _fallback/metrics.ini above the [ScreenGameplay]
+ MarginFunction metric. Basically, you can define a lua function that
+ returns the space you want at the edges and in the center instead of
+ setting position metrics. Do NOT use Style:GetWidth to calculate the
+ margins your function returns.
+ ScreenGameplay now handles zooming the notefield to fit in the space
+ instead of using the NeedsZoomOutWith2Players flag in the style.
+ If the notefield doesn't fit in the space between the margins, and there is
+ only one player, the player will be centered even if the Center1Player pref
+ is false. [kyzentun]
+* [Style] NeedsZoomOutWith2Players decapitated. Always returns false now.
+ GetWidth added. [kyzentun]
+* [techno] Techno game mode no longer has special column width for versus.
+ Techno was the only game mode that used the NeedsZoomOutWith2Players flag,
+ and the zoom factor it applied was 0.6, and the special versus column width
+ was 0.6*normal, so this should make no difference. [kyzentun]
+
+2014/12/03
+----------
+* [command line arg] --game command line arg added for setting the game type
+ when starting stepmania. [sillybear]
+* [Announcer] "evaluation full combo W3" and "evaluation full combo W4"
+ responses added. [sillybear]
+
+2014/12/01
+----------
+* [ScreenMapControllers] Forced sanity checking of key mappings added.
+ Start, MenuLeft, MenuRight, and Operator keys must be mapped.
+ Reset key mappings option added to debug menu for recovering from an
+ unusuble keymap without needing to find and delete KeyMaps.ini. [kyzentun]
+
+2014/11/30
+----------
+* [NoteField] New functions added for controlling the receptor and ghost arrow
+ (explosion) flashes. [kyzentun]
+
+2014/11/28
+----------
+* [Profile] Guest and Test profile types added. All existing and new
+ profiles are Normal. If a profile is changed to Guest through the profile
+ management screen, it will always show at the top of the list. A profile
+ set to Test will always be at the bottom of the list. Profiles can be
+ moved around in the list.
+ GetType and GetPriority lua functions added to Profile.
+ Bug that caused a crash when a profile dir was renamed to a non-number and
+ a new profile was created fixed. [kyzentun]
+* [Everything] Actor and singleton functions that formerly returned nothing now
+ return the actor or singleton. Example (set zoom, x, y, and diffuse in one):
+ self:zoom(.5):xy(_screen.cx, _screen.h-60):diffuse(color("#dc322f"))
+ This also works for PlayerOptions and SongOptions API functions. Pass true
+ as an extra arg, and they can be chained.
+
+2014/11/22
+----------
+* [Preferences] MinTNSToHideNotes preference added. [kyzentun]
+* [PlayerOptions] MinTNSToHideNotes mod added. [kyzentun]
+
+2014/11/15
+----------
+* [Preferences] Default Fail Type preference mechanism changed internally again.
+ Set your Default Fail Type preference again. [kyzentun]
+
+2014/11/05
+----------
+* [ScreenPrompt] Answer OnCommand metrics fixed to actually work. [kyzentun]
+
+2014/11/01
+----------
+* [RollingNumbers] Cropping and color during tweens fixed. [kyzentun]
+
+2014/10/27
+----------
+* [Changelog] Vospi read the release notes.
+
+2014/10/23
+----------
+* [Global] approach, multiapproach, lerp, and lerp_color lua functions added. [kyzentun]
+
+2014/10/20
+----------
+* [StageStats] GetStepsSeconds function added. [kyzentun]
+* [Steps] If an unrecognized step type is saved, preserve that step instead of
+ deleting it. A warning will be placed in the log file during song load. [kyzentun]
+
+================================================================================
+StepMania 5.0 beta 4a | 20141015
+--------------------------------------------------------------------------------
+
+2014/10/19
+----------
+* [BackgroundEffects] Fixed errors in StretchNoLoop and StretchRewind.
+
+2014/10/13
+----------
+* [NoteDisplay] Var Player and Var Controller work for non-receptor arrows. [hanubeki]
+* [Mac OS X] Allow StepMania to be built and run in Yosemite.
+
+2014/10/11
+----------
+* [NoteDisplay] Add two noteskin metrics, {PartName}NoteColorType and
+ {PartName}NoteColorCount. View https://github.com/stepmania/stepmania/pull/328
+ for more information. [hanubeki]
+
+================================================================================
+StepMania 5.0 beta 4 | 20140930
+--------------------------------------------------------------------------------
+
+To reduce the number of entries in this file, entries are dated to the Saturday after they occurred.
+
+2014/09/27
+----------
+* [Preferences] DebounceCoinInput time pref added for machines that need a
+ different debounce time for coin input.
+* [Preferences] DefaultFailtype preference reinstated to resolve default fail
+ type problems.
+* [TimingData] TimingData::GetReturnsNumbers metric added to make TimingData
+ functions return tables of numbers instead of strings.
+
+2014/09/20
+----------
+* [ScreenOptionsCustomizeProfile] New screen added for setting profile stats.
+
+2014/09/13
+----------
+* [Endless] Songs are repicked on each repeat of the course.
+* [GameState] GetCurrentStage logic fixed to correctly return Stage_Final in
+ all cases where it should.
+* [JudgmentMessage] Tracks parameter replaced with Notes and Holds parameters.
+* [NumPadEntry] New customizable lua class for custom screens.
+* [ScreenHeartEntry] New screen added to default.
+* [TapNote] Class exposed to lua through JudgmentMessage with all data on the
+ TapNote.
+
+2014/09/06
+----------
+* Changed ES/OMES speed mod to 2x from 1.5x.
+* [ActorMultiVertex] GetTexture lua function added.
+* [BitmapText] max_dimension_use_zoom lua function added.
+* [Edit Mode] Swap Up/Down and Arbitrary Remap added to Alter menu.
+* [GameState] InsertCoin and InsertCredit lua functions added.
+* [PrefsManager] FastNoteRendering preference added.
+* [RageTexture] Reload lua function added.
+* [RageTexture?] "__screen__" added as special screenshot texture name.
+ Causes a skip.
+* [Screen] SetNextScreenName lua function added.
+* [ScreenCredits] New ScreenCredits. Please update your theme if you applied
+ theme changes to this screen.
+* [ScreenMapControllers] Massively changed to make it not suck. New elements,
+ new metrics, new actions.
+* [WheelItemBase] IsLoaded lua function added.
+
+2014/08/30
+----------
+* [ActorScroller] wrap parameter added for controlling looping behavior better.
+* Life difficulty matches StepMania 3.9's again.
+
+2014/08/16
+----------
+* [ActorFrame] Internal diffuse and glow now apply to BitmapText children.
+* [GameState] SetCurrentPlayMode and SetCurrentStyle lua functions added.
+* [PrefsManager] BackgroundFitMode preference added to settle all problems
+ with how backgrounds are stretched or fit.
+* [ScreenSetBGFit] New screen for presenting the BackgroundFitMode preference.
+ See _fallback/BGAnimations/ScreenSetBGFitMode overlay.lua for documentation.
+* [ThemeManager] HasMetric/String now return false when the group name or
+ metric name is an empty string.
+
+2014/08/09
+----------
+* [GameManager] GetStylesForGame lua function added.
+* [LifeMeterBattery] CourseSongRewardLives metric added.
+* [LifeMeter] LifeType, DrainType, and BatteryLives moved to PlayerOptions so
+ the players can have different settings.
+* [ScreenGameplay] LifeMeterChangedP1 message is no longer broadcast for for
+ P2's lifemeter. Use LifeMeterChangedP2. "Life" and "StepsSecond" are passed
+ in the params table for the message.
+
+2014/08/02
+----------
+* [MusicWheel] Added GetSelectedSection lua function.
+
+2014/07/26
+----------
+* [ActorScroller] Accidental "permanent loop" bug fixed.
+* [Common metrics] AfterThemeChangeScreen, AfterGameChangeScreen, and
+ AfterGameAndThemeChangeScreen optional metrics added to Common section.
+* [GameManager] SetGame lua function added.
+* [Globals] OldStyleStringToDifficulty lua function added.
+* [PrefsManager] SavePreferences lua function added.
+ ThreeKeyNavigation preference added.
+* [SoundManager] IsTimingDelayed lua function added.
+* [ThemeManager] SetTheme lua function added.
+* [ScreenHowToPlay] CharacterName metric works again.
+
+2014/07/18
+----------
+* [BitmapText] LoadFont is now obsolete. Set the Font attribute of the
+ BitmapText instead.
+* [ErrorReporting] New system that reports theme errors through dialogs and
+ an on screen display. (Sorry guys, your themes are all full of errors, and
+ you should fix them)
+* [LogDisplay] New actor class used by ErrorReporting, possibly useful more
+ widely. See _fallback/Scripts/04 LogDisplay.lua for docs.
+
+2014/07/05
+----------
+* [Actor] GetDestX/Y/Z lua functions added.
+* [Profile] Lua functions for calculating calories based on heart rate added.
+ See ThemerDocs/calories.txt
+
+2014/06/28
+----------
+* [ArrowEffects] New namespace of lua functions.
+* [Screen] AddInputCallback and RemoveInputCallback lua functions added.
+
+2014/06/21
+----------
+* [Gameplay] CMods and MMods now automatically compensate for music rate.
+* [Globals] SaveScreenshot lua function added.
+* [ScreenPlayerOptions] ArbitrarySpeedMods system added.
+* [ScreenSelectMusic] Pad codes that set modifiers disabled.
+
+2014/06/07
+----------
+* [ScreenSelectMusic] SelectMenuInput message is now always sent when Select
+ is pressed.
+
+2014/05/17
+----------
+* [GameState] StoreRankingName lua function added. Ranking names now allow
+ lowercase.
+* [Profile] SetLastUsedHighScoreName and GetHighScoreListIfExists lua
+ functions added.
+
+2014/05/10
+----------
+* [Player] Tracks param added to JudgmentMessageCommand. (will change before
+ beta 4)
+* [ScreenGameplay] Themable haste system added.
+ GetTrueBPS lua function added.
+* [ThemeManager] GetMetricNamesInGroup and GetStringNamesInGroup lua functions
+ added.
+
+2014/05/03
+----------
+* [ActorFrame] GetChild and GetChildren modified, see Lua.xml.
+* [NoteSkinManager] GetMetric function added.
+* [PlayerOptions] Entirely new API for setting player options. Superior
+ alternative to ApplyGameCommand.
+* [SongOptions] Entirely new API for setting song options. Same design as new
+ PlayerOptions API.
+* [NoteField] NoteField Board can now use any AutoActor class instead of just
+ Sprite/Sprite-derived ones.
+
+2014/04/26
+----------
+* [Style] GetColumnInfo and GetColumnDrawOrder lua functions added.
+
+2014/04/19
+----------
+* [ActorMultiVertex] New actor class added.
+* [ScreenGameplay] GetHasteRate lua function added. GiveUpSeconds metric added.
+* [SoundManager] StopMusic lua function added.
+
+2014/04/05
+----------
+* [GameState] HaveProfileToLoad/Save and Load/SaveProfiles lua functions added.
+* [ScreenWithMenuElements] StartTransitioningScreen lua function added.
+
+2014/03/22
+----------
+* [Player] HoldNoteScore_MissedHold added.
+
+2014/03/05
+----------
+* [ScreenNetSelectBase] Fix colors when unicode characters are in chat box.
+
+2014/03/08
+----------
+* [ActorScroller] DrawByZPosition fixed for looping ActorScrollers.
+* [Globals?] GetTimeSinceStart global lua function added.
+* [Player] FirstTrack parameter added to JudgmentMessageCommand. (will change
+ before beta 4)
+
+================================================================================
+StepMania 5.0 beta 3 | 20140224
+--------------------------------------------------------------------------------
+
+2014/02/22
+----------
+* [Actor] texturetranslate lua function added.
+* [BitmapText] distort lua function added.
+* [ComboGraph] Added BodyHeight metric.
+* [GameState] JoinInput lua function added.
+* [PlayerOptions] "resetspeed" mod added.
+* [PlayerStageStats] GetComboList and GetLifeRecord lua functions added.
+* [Preferences] ComboContinuesBetweenSongs preference added.
+* [ScreenWithMenuElements] SetAllowLateJoin lua function added.
+* [SoundManager] loop and applyRate args added to PlayMusicPart lua function.
+* [Sprite] SetCustomPosCoords lua function added.
+* [Utils] XML backwards compatibility added.
+
+2014/02/08
+----------
+* [Actor] Added heading, pitch, and roll lua functions.
+
+2013/10/09
+----------
+* [CombinedLifeMeterTug] Added names and commands to Separator and Frame items.
+ [SSC]
+* [MeterDisplay] Added names to Stream and Tip items. [SSC]
+
+2013/10/06
+----------
+* [ScreenOptions] Allow for the use of per-screen Start sounds instead of a forced
+ Common Start. [SSC]
+
+2013/10/03
+----------
+* [GameConstantsAndTypes] Declared RankingCategory as a type. [SSC]
+* [Profile] Added GetCategoryHighScoreList(StepsType,RankingCategory) Lua
+ binding. [SSC]
+
+2013/09/23
+----------
+* PIUIO: Fix default mapping for lights on five-panel setups.
+
+2013/09/06
+----------
+* Re-implement CustomSpeedMods to use new Lua hooks. Fixes assertion when
+ loading SpeedMods.txt from unmounted card.
+* Add Lua hooks for themes to load/save custom data to/from profiles.
+* [Linux] Ignore comments in /etc/fstab.
+
+2013/08/30
+----------
+* Fix editor behavior when deleting/shifting timing changes.
+* Re-enabled "convert to stop/delay" at beat 0.
+
+2013/08/29
+----------
+* Fix hack pertaining to ModIcons and Lua-based option rows.
+
+2013/08/22
+----------
+* [FFmpeg] Fix several video timing issues (delay, stutter, looping) with the
+ FFmpeg driver.
+
+2013/08/14
+----------
+* [ThemePrefs] Fix saving of ThemePrefs in default theme.
+
+2013/08/12
+----------
+* [ScreenEdit] Fix Undo for the Alter and Turn commands. Previously, trying
+ to undo one of these commands would erase the notes instead. Now it behaves
+ as expected.
+
+2013/08/08
+----------
+* [SoundDriver_JACK] New sound driver (experimental!). To use this, specify
+ JACK in your SoundDrivers preference, and set SoundDevice to a
+ comma-separated list of ports to connect to, for example:
+ "SoundDevice=system:playback_1,system:playback_2".
+
+2013/07/18
+----------
+* [ScreenEdit] Display scroll segments in editor and preview for both Song and
+ Steps Timing.
+
+2013/07/09
+----------
+* [MemoryCardDriver] Allow Unix fstab to specify memory card devices by alias
+ (e.g. /dev/disk/by-path/*)
+
+2013/06/29
+----------
+* [ArchHooks_Unix] Support the GoToUrl function. [phantom10111]
+
+2013/06/18
+----------
+* [InputHandler_DirectInput] Add support for all possible input device types
+ under new DirectX library. [Shenjoku]
+* Add --enable-lto option for configure on Linux. [phantom10111]
+
+================================================================================
+StepMania 5.0 beta 2a | 20130616
+--------------------------------------------------------------------------------
+
+2013/06/15
+----------
+* Fix some minor DLL issues on Windows. [wolfman2000]
+* Theme updates to make it faster. [Midiman]
+
+2013/06/09
+----------
+* [ScreenJukebox] Check for existing steps when starting jukebox.
+* [ScreenEdit] Fix crash related to keysounds. [wolfman2000]
+
+2013/06/04
+----------
+* Fix theme glitches caused by the change to Home/Free modes.
+* [UnlockManager] Allow entries to be explicitly locked by the theme.
+ [wolfman2000]
+
+================================================================================
+StepMania 5.0 beta 2 | 20130602
+--------------------------------------------------------------------------------
+
+2013/06/02
+----------
+* Add several video container formats that are supported by FFmpeg: mkv, mp4,
+ mov, flv, f4v.
+
+2013/05/31
+----------
+* [ArchHooks_MacOSX] Add per-user folders in ~/Application Support.
+
+2013/05/30
+----------
+* [ScreenSelectMusic] Fix crash when sorting in Oni mode.
+
+2013/05/28
+----------
+* [ActorFrame] Propagate glow and diffuse to children of ActorFrames. This
+ should fix any visual problems with layered noteskins and mods.
+
+2013/05/25
+----------
+* Remove the "random" part of the Random Vanish mod to prevent crashing.
+ [wolfman2000]
+
+2013/05/21
+----------
+* [MovieTexture_FFMpeg] Fix crashing with large videos.
+
+2013/05/20
+----------
+* [NotesLoaderSM] New algorithm for converting negative BPMs and stops to
+ warps, more closely matching the behavior of old StepManias.
+
+2013/03/24
+----------
+* [MusicWheel] Add the ChangeSort method to the Lua interface to allow the
+ theme to switch sorting methods.
+
+2013/02/04
+----------
+* [Player] Add a "Column" parameter to the StepMessage to allow the theme or
+ chart to discover which column is being triggered.
+* [ArchHooks] Unix: Move UserPackages to Packages in the per-user directory,
+ and remove Data from the per-user directory. Users who have installed
+ packages to UserPackages will need to migrate them to Packages instead.
+
+2013/02/03
+----------
+* [Player] Fix a stutter that can take place when mines are skipped during
+ warp segments. [phantom, wolfman2000]
+
+2013/01/23
+----------
+* [TimingData, ScreenEdit] Fixed behavior in the editor whereby making changes
+ to Song Timing would unexpectedly change all charts to Steps Timing.
+ (Thanks to DJ OMiY for reporting and isolating the problem.)
+
+2013/01/11
+----------
+* [Screen] Allow overlay screens to accept codes.
+
+2013/01/06
+----------
+* [TimingChanges, ScreenEdit] Fix a bug in the editor where adding BPM changes
+ that differ by a very small amount from the previous BPM change were not
+ added at all. [vulture/wolfman2000]
+
+2013/01/03
+----------
+* [ScreenGameplayShared] Fix routine mode. [djpohly/FSX/shakesoda/wolfman2000]
+
+================================================================================
+StepMania 5.0 beta 1a | 20121228
+--------------------------------------------------------------------------------
+
+2012/12/28
+----------
+* [default] Improved autogen icon and Oni life display. [Midiman]
+* [ScreenSelectMusic] Fix mouse events being eaten. [shakesoda]
+* [ScreenEdit] Remove extra zeroes from editor text entry. [djpohly]
+* [WheelBase] Add WheelBase.Move Lua binding. [shakesoda]
+
+2012/12/27
+----------
+* [default] Various theme improvements. [Midiman]
+* [PlayerStageStats] Restore SetScore and SetCurMaxScore Lua bindings. [shakesoda]
+
+2012/12/26
+----------
+* Code restructuring. [djpohly/wolfman2000]
+
+================================================================================
+StepMania 5.0 beta 1 | 20121225
+--------------------------------------------------------------------------------
+
+2012/12/25
+----------
+* [PlayerStageStats] Remove SetScore and SetCurMaxScore Lua bindings. [FSX]
+
+2012/12/24
+----------
+* [ScreenDebugOverlay] Don't reset the gamestate when reloading screens. Reloading
+ ScreenSelectMusic or any other screen which relies on that works now. [shakesoda]
+* [RageUtil] Fix math.random() never returning > 0.5. [vyhd]
+
+2012/12/18
+----------
+* [default] Fix Final Stage not appearing on StageInformation if a Long or Marathon song is
+ played as the last song. [FSX]
+* [fallback] Add Song:GetStageCost() [FSX]
+
+2012/12/17
+----------
+* [Font] Fix a unicode-related crash which would sometimes happen on SMO. [shakesoda]
+* [GameState] Fix arrow stuttering for cases where you get duplicated values between
+ updates. This helped significantly for PulseAudio on Ubuntu 12.04, for me. [shakesoda]
+
+2012/12/13
+----------
+* [RageDisplay_GLES2] Carry over a bunch of functionality from RageDisplay_OGL, still not
+ usable however. [shakesoda]
+
+2012/11/26
+----------
+* [ScreenSelectMusic] Only unchoose steps if there are more than 10 seconds on the timer
+ to prevent unchoosing steps for an infinite timer. [Marcio Barrientos]
+
+2012/11/22
+----------
+* [ProfileManager] Added SaveProfile, SaveLocalProfile, GetLocalProfileIDs,
+ ProfileFromMemoryCardIsNew, GetSongNumTimesPlayed, LocalProfileIDToDir, and
+ GetLocalProfileDisplayNames Lua bindings. [Alfred Sorenson]
+* [Profile] Add GetGUID Lua binding. [Alfred Sorenson]
+
+2012/11/13
+----------
+* [RageDisplay_OGL] Try to fix the shader compilation crash once and for all. [shakesoda]
+
+2012/10/31
+----------
+* [RageDisplay_GLES2] Initial GLES2 commit. Not functional. [shakesoda]
+
+2012/10/20
+----------
+* [NotesLoaderSMA] Fix default speed length for SMA files. [Aldo MX]
+* [NotesLoaderSMA] First segment required a zero. [Aldo MX]
+
+
+2012/10/17
+----------
+* [ScreenEdit] Don't allow ratings of 0. [shakesoda]
+
+2012/08/10
+----------
+* [InputHandler_Linux_PIUIO] Add interface to PIUIO kernel module. [djpohly]
+
+2012/08/04
+----------
+* General theme updates: made things faster, title menu updated. [Midiman]
+
+2012/07/26
+----------
+* [ScreenDebugOverlay] Added BackgroundColor metric. [AJ]
+
+2012/07/19
+----------
+* [OptionRow] Set text after running OnCommand so commands like "uppercase,true"
+ actually have a chance to work. [AJ]
+
+2012/07/17
+----------
+* [SongManager] Fix a bug where DVNO wouldn't always be gold. [AJ]
+
+================================================================================
+StepMania 5.0 alpha 3 | 20120711
+--------------------------------------------------------------------------------
+
+2012/07/11
+----------
+* [ScreenEditMenu] Don't use "Blank" in the description for blank steps;
+ use a blank string instead. [AJ]
+
+2012/07/10
+----------
+* [ScreenSelectMusic] Fix an issue where Control+ wouldn't work. [AJ]
+
+2012/07/09
+----------
+* [InputMapper] Use "|" for separating entries instead of ",", since some
+ companies have names like "x Ltd., something". [Mordae, AJ]
+
+2012/07/06
+----------
+* [ScoreDisplayRave] Add FrameBase and FrameOver to the metrics. [AJ]
+* [PlayerStageStats] Added GetSongsPassed and GetSongsPlayed Lua bindings. [AJ]
+
+2012/07/05
+----------
+* [ScreenRanking] Added "NextPage" command. "SwitchPage" command is
+ now "SwitchedPage". [AJ]
+* [ScreenRanking] Don't clobber alpha values when applying colors in SetPage. [AJ]
+
+2012/07/03
+----------
+* [ScreenHowToPlay] Actually shows notes again. [AJ]
+* [ScreenGameplay] When ShowLifeMeterForDisabledPlayers is true, don't fill up
+ life in the meter for the disabled player. (LifeMeterBar only) [AJ]
+
+2012/07/02
+----------
+* [ScreenHowToPlay] Run InitCommand on Characters if enabled. [AJ]
+* [RageUtil] Add detection of ".hg" to StripCvsAndSvn. [AJ]
+
+2012/06/27
+----------
+* [SongManager] Ending a group's name in PreferredSongs with "/*" will now load
+ all songs from that group automatically. [AJ]
+
+2012/06/21
+----------
+* [ProfileManager] Added GetPlayerName(pn) Lua binding. [AJ]
+
+2012/06/05
+----------
+* [GrooveRadar] Added SetFromValues(pn,{f1,f2,f3,f4,f5}) Lua binding. [AJ]
+
+2012/06/02
+----------
+* [PrefsManager] Added StretchBackgrounds preference. [AJ]
+* [BMSLoader] Add #banner support. [hanubeki]
+ Source: http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=bf8b57b9a662af59de66b9d06ca282f38f9126d9
+
+2012/05/31
+----------
+* [PaneDisplay] Added NullCountString metric. [AJ]
+* [PlayerOptions] Fixes to Get/Set[C, M, X]Mod Lua bindings. [hanubeki]
+ Source: http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=97761b5dc87b8c8a1b296985a09814337578c745
+
+2012/05/27
+----------
+* [MusicWheel] Added EmptyColor metric. [AJ]
+* [PlayerState] Enabled GetPlayerController Lua binding.
+
+2012/05/21
+----------
+* [NotesLoaderBMS] Support for #BMP based background changes. [theDtTvB]
+* [SongManager] Add song to the list of songs before loading it, this fixes
+ crashes in some BMS files. [theDtTvB]
+* [ScreenEdit] Allow a new way of creating and modifying attacks using the
+ Area Menu. Note: Using the C or V keys is no longer allowed for attacks.
+ It will simplify things for later. [Wolfman2000]
+* [Steps] Modified HasSignificantTimingChanges; the following now disqualify
+ when using a CMod: Stops, Delays, Warps, Speed Changes, Scroll Changes.
+ Songs with a non-constant BPM will only disqualify if the High/Low difference
+ is greater than 3.00. [AJ]
+
+2012/05/19
+----------
+* [Actor] Made the xy command a source-code level command. [AJ]
+
+2012/05/17
+----------
+* [LoadingWindow_Gtk] Actually resolve the path to the Splash file. [djpohly]
+
+2012/05/16
+----------
+* [ScreenWithMenuElements] Added DelayMusicSeconds metric. [AJ]
+* [ScreenOptionsMasterPrefs] Allow for FastLoadAdditionalSongs preference
+ to be called via the "conf" command. [AJ]
+
+2012/05/14
+----------
+* [Course] Added AllSongsAreFixed() Lua binding. [AJ]
+
+================================================================================
+StepMania 5.0 alpha 2 | 20120504
+--------------------------------------------------------------------------------
+
+2012/05/03
+----------
+* Add Var "Player" and Var "Controller" for NoteSkin. [hanubeki]
+ Sourced from http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=824cff29912d1c29a667046ba463d195e81c524a
+* [CustomSpeedMods] If a player decides to remove 1x from the machine profile's
+ custom speed mods, re-add it back in to avoid crashes. [AJ]
+
+2012/05/02
+----------
+* Make ReceptorArrowRow and GhostArrowRow respect the column draw order. [hanubeki]
+ Sourced from http://code.google.com/r/hanubeki-modified-sm-ssc/source/detail?r=8ccf7449651eef51e8c42d031aa64da49a0b72ce
+
+2012/04/25
+----------
+* [Profile] Added GetLastPlayedSong and GetLastPlayedCourse Lua bindings. [AJ]
+
+2012/04/22
+----------
+* [LifeMeterBar] Reverted a change from 2010 that messed with how the life meter
+ subtracts life. The life difficulty should match StepMania 3.9 again. [AJ]
+
+2012/04/08
+----------
+* [ScreenNetworkOptions] Fixed a bug where localized text would not show up
+ properly. Fixes issue 759. [AJ]
+* [Steps, Song] Replace Steps:UsesSplitTiming with
+ Song:IsStepsUsingDifferentTiming for both C++ and Lua. [wolfman2000]
+
+2012/04/06
+----------
+* Modify Jousway's planned noteskin to allow it to work with Technomotion
+ style gameplay. Expect minor bugs. [Jousway, Wolfman2000]
+
+2012/04/03
+----------
+* [PlayerOptions] Fix setting some effect mods that were always set to Drunk.
+ I wonder who had too much to drink. [TaroNuke]
+
+2012/03/31
+----------
+* [GameManager] Allow beat single7 and versus7 to be shown in Demonstration. [AJ]
+
+2012/03/28
+----------
+* [ScoreKeeperRave] Actually handle hold scores in HandleHoldScore().
+ Players should please provide feedback on how this affects gameplay, as this
+ is a temporary feature. [AJ]
+* [GameConstantsAndTypes] Made StageResult Lua-aware. [AJ]
+* [GameState] Added GetStageResult(pn) Lua binding. [AJ]
+* [Player] Keysounds now respect the volume settings. [hanubeki]
+ Sourced from hanubeki-modified-sm-ssc rev. 16fc5b714582
+
+2012/03/27
+----------
+* [ScreenEditMenu] Don't hardcode stopping the music on pressing the back button.
+ This interferes with the StopMusicOnBack metric. [AJ]
+
+2012/03/20
+----------
+* [Background] Fix 3D noteskins and dancing characters from clashing with each other. [shakesoda, AJ]
+* [NoteField] Fix 3D noteskins overlapping. [shakesoda, AJ]
+* [ScreenEdit] Don't use Step timing by default. [Midiman]
+* [ScreenEdit] Allow playback of course modifiers in Course Edit mode [Midiman]
+
+2012/03/15
+----------
+* [04 Scoring.lua] Added various 3.9 and 3.9+ scoring methods. [hanubeki]
+
+2012/03/12
+----------
+* Remove libtheora support since ffmpeg already supports theora videos. [cvpcs]
+
+2012/03/10
+----------
+* Update ffmpeg support to v0.10. [cvpcs]
+
+2012/03/09
+----------
+* [PlayerOptions] Don't display x-mods when using m-mods.
+ Sourced from hanubeki-modified-sm-ssc rev. bd08a58dd7cf and OpenITG.
+
+2012/03/08
+----------
+* [MusicWheel] Added RouletteStopped message, which is broadcast when Roulette
+ is finished and the wheel is locked. [AJ]
+* [WheelBase] Made WheelState a Lua-enabled enum and added
+ GetWheelState() Lua binding. Deprecated IsLocked() Lua binding. [AJ]
+
+2012/03/07
+----------
+* [ScreenSelectMaster] Now updates choices on player join; it will move the
+ scroller to the correct location, but the GainFocus/LoseFocus commands don't
+ seem to work. [AJ]
+
+2012/03/05
+----------
+* [GameCommand] Added GetDifficulty(), GetCourseDifficulty(), GetPlayMode(),
+ GetSortOrder(), GetAnnouncer(), GetPreferredModifiers(), and
+ GetStageModifiers() Lua bindings. [AJ]
+
+2012/03/04
+----------
+* [Player] Changed default Hold window to 0.250f, like it was in 3.9. [AJ]
+
+2012/03/02
+----------
+* [NotesLoaderBMS] Fix calculating stops, Support for #LNOBJ, Don't use #BACKBMP
+ as song background if main StepsType is beat-*. [hanubeki]
+ These changes constitute revisions f26caccf103e, 2d114b38c6c9, and b60f021d2b67
+ of hanubeki-modified-sm-ssc. (http://code.google.com/r/hanubeki-modified-sm-ssc/)
+
+2012/03/01
+----------
+* [MemoryCardManager] Disable Memory Cards by default. If you want to use them,
+set MemoryCards=1 in Save/Preferences.ini (or Save/Static.ini). [AJ]
+* [GameState] Set Premium to Premium_DoubleFor1Credit by default. [AJ]
+* [ScreenSelectMusic] Added PlaySoundOnEnteringOptionsMenu metric. [AJ]
+* [MusicWheel, WheelBase] Added collapse sound. [AJ]
+
+================================================================================
+StepMania 5.0 alpha 1a | 20120219
+--------------------------------------------------------------------------------
+
+2012/02/19
+----------
+* [Style] Added LockedDifficulty() Lua binding. [AJ]
+
+2012/02/15
+----------
+* [HighScore] Added Max Combo, Stage Award and Peak Award. New Lua bindings for
+ HighScore: GetMaxCombo(), GetStageAward(), GetPeakComboAward(). [AJ]
+ (the specifics of this are subject to change.)
+
+2012/02/10
+----------
+* [WheelBase, WheelItemBase] Turned WheelItemDataType into a Lua type,
+ made WheelBase:GetSelectedType() return the enum instead of a number. [AJ]
+
+2012/02/08
+----------
+* [ScreenEdit] Added support for editing keysounds. Use the Area Menu (Enter)
+ to either modify what sounds play on that row, or even remove a sound from
+ the list. Any sounds assigned to empty notes will automatically become
+ an AutoKeysound, and any AutoKeysounds that have their sound removed will
+ become empty notes. [Wolfman2000]
+
+2012/02/08
+----------
+* [ScreenOptionsMaster] Added StepsRowLayoutType metric.
+ (Valid values are "ShowAllInRow" or "ShowOneInRow".) [AJ]
+
+2012/01/23
+----------
+* [Player] Tap Note Scores (tns) can now be "AvoidMine" or "HitMine" in
+JudgmentMessageCommand. [Saturn2888, shakesoda]
+
+2012/01/15
+----------
+* [WheelNotifyIcon] Add the NumIconsToShow metric. [Wolfman2000]
+* [PlayerOptions] Fix a problem with m-mods where you would get m200 as
+ the default speed modifier. [AJ]
+
+2012/01/11
+----------
+* [ScreenEdit] Fix a floating point issue when dealing with speed segments.
+ [Wolfman2000]
+
+2012/01/09
+----------
+* [Song] Fix a bug introduced with "Only read certain tags during first load"
+ where song graphic files wouldn't load. [theDtTvB]
+
+================================================================================
+StepMania 5.0 alpha 1 | 20120108
+--------------------------------------------------------------------------------
+
+2012/01/08
+----------
+* [Song] Add HasPreviewVid and GetPreviewVidPath lua binding [cerbo]
+
+2012/01/08
+----------
+* [ScreenManager] Made AddScreenToTop take a second (optional) parameter for
+ posting a ScreenMessage on screen pop. [AJ]
+* Only read certain tags during first load; makes song loading faster. [theDtTvB]
+
+2012/01/07
+----------
+* Fix Portable.ini not working on Mac OS X. [shakesoda]
+
+2012/01/05
+----------
+* [PercentageDisplay] Remove unused ApplyScoreDisplayOptions metric;
+ added PercentFormat and RemainderFormat metrics. [AJ]
+* Fix Portable.ini not working in Linux. [FSX]
+
+2012/01/04
+----------
+* Fix a scoring/grading bug with Lifts. [FSX]
+
+2011/12/27
+----------
+* [MusicWheel] Add IsRouletting Lua binding. [AJ]
+* [LuaManager] Remove GetOSName Lua binding; use GetArchName instead. [AJ]
+
+2011/12/26
+----------
+* [ArchHooks_OSX] Worked around a crash when language detection goes wrong.
+ Note: a real fix should be looked into. [shakesoda]
+
+2011/12/23
+----------
+* [Song] Fixed a bug where a sample start of 0 wouldn't work. [AJ]
+* [Game] Added CountNotesSeparately and GetMapJudgmentTo(TapNoteScore)
+ Lua bindings. [AJ]
+* [StepMania.cpp] Fix initial aspect ratio on first boot, hopefully.
+ (See issues 6 and 27) [AJ]
+
+2011/12/22
+----------
+* [LuaManager] Added ProductFamily() Lua binding. [AJ]
+
+2011/12/17
+----------
+* [Various] Allow loading of *.jpeg in addition to *.jpg. [AJ]
+
+2011/12/16
+----------
+* [StreamDisplay] Added VelocityMultiplier, VelocityMin, VelocityMax,
+ SpringMultiplier and ViscosityMultiplier metrics. [AJ]
+
+2011/12/12
+----------
+* [ScreenEdit] Add the GAMESTATE:InStepEditor Lua binding. [Wolfman2000]
+* [Player, ScreenGameplay] Allow failing on Oni without crashing. This one
+ took awhile. [Wolfman2000]
+* [LifeMeterBattery] Fixed various issues (lives not fully disappearing on fail,
+ P2 lose life animation having the wrong x zoom, hide the lives number if it
+ falls below 0). [AJ]
+
+2011/12/11
+----------
+* [ScreenEdit] Restore cycling the timing segments for jumping between.
+ The required line somehow never got replaced. [Wolfman2000]
+
+2011/11/30
+----------
+* [PlayerOptions] Added IsEasierForSongAndSteps(Song,Steps,PlayerNumber) and
+ IsEasierForCourseAndTrail(Course, Trail) Lua bindings. [AJ]
+* [PlayerState] Added GetSuperMeterLevel() Lua binding. [AJ]
+
+2011/11/28
+----------
+* [ScreenGameplay] Add the SurvivalModOverride metric. Let the themer decide
+ if mods should be overridden on survival or not. Funny enough, this used
+ to be true for the old Oni style mode, but...well, we'll cross that bridge
+ later. [Wolfman2000]
+* [LifeMeterBattery] Added MaxLives metric, which limits the maximum amount of
+ lives. Setting this to 0 will remove the limit. [AJ]
+
+2011/11/27
+----------
+* [PlayerOptions] Pretty large changes here, namely a bunch of new bindings.
+ Fixed the logic for GetReversePercentForColumn; It will now return nil for
+ invalid columns. Also fixed the logic for UsingReverse (now checks for 1.0f)
+ and SetPassmark (no longer allows values < 0.00f and > 1.0f). [AJ]
+* [ScreenEdit] Allow inserting and removing beats and timing changes in
+ specific note increments instead of just quarter notes (a whole beat).
+ Those that prefer to keep using the shortcut keys will note that the
+ behavior has not changed for that: only by going into the Area menu can you
+ deal with more specific changes. [Wolfman2000]
+
+2011/11/26
+----------
+* [ScreenEdit] Restore using F9 and F10 to adjust stops by a fixed amount.
+ Sorry for the delay in this. [Wolfman2000]
+* [ScreenEdit] Minor convenience. If you attempt to create a negative stop
+ segment from scratch, it does not create, and you are not requested to
+ save on exit, for there is nothing to save. [Wolfman2000]
+* [ScreenEdit] Allow Shift + F9/F10 for adjusting delays. This works the same
+ way as adjusting stops. [Wolfman2000]
+
+2011/11/25
+----------
+* [PlayerStageStats] Hitting a mine no longer gives you full combo when
+ [Gameplay] MineHitIncrementsMissCombo=true. [AJ]
+
+2011/11/24
+----------
+* [PlayerStageStats] Added GetFailed and GetNumControllerSteps Lua bindings. [AJ]
+
+2011/11/15
+----------
+* [LifeMeterBar] Added the ForceLifeDifficultyOnExtraStage metric and
+ the ExtraStageLifeDifficulty metric. Let the themer decide if extra stages
+ should have their own life bar behavior. Note that this metric does NOT
+ change the lifebar to the battery style. [Wolfman2000/FSX]
+
+2011/11/14
+----------
+* [Mac OS X] Restore JPEG functionality. [Wolfman2000]
+
+2011/11/06
+----------
+* [GameState] Add the RefreshNoteSkinData lua binding. This will only
+ refresh the NS data for the present game, not all games. [Wolfman2000]
+* [ScreenSelectMusic] Fixed Rave difficulties not being synced on late join.
+ Fixes issue 577. [AJ]
+* [GameplayAssist] Don't play sounds if the player is dead. Fixes issue 621. [AJ]
+
+2011/11/04
+----------
+* [ScoreKeeperRave] Revert fix from 2011/10/28. [AJ]
+* [ScoreKeeperRave] Fixed Miss and HitMine giving meter life.
+ (Fixes issue 622.) [AJ]
+
+2011/11/02
+----------
+* [ArchHooks] Add the GetArchName lua binding. To the themers that use
+ GetOSName, that function may be deprecated in the future. For now,
+ both options exist. [vyhd, Wolfman2000]
+
+2011/11/01
+----------
+* [ArrowEffects] Fix Expand, and possibly other mods, from breaking if
+ using a second player. [Wolfman2000]
+* [ArchHooks] Add the AppHasFocus lua binding. [vyhd, Wolfman2000]
+
+2011/10/29
+----------
+* [GameState] Add the ResetPlayerOptions lua binding. [Wolfman2000]
+
+2011/10/28
+----------
+* [ScoreKeeperRave] Fix an issue where the super meter would not decrease back
+ to 1 after hitting the end of 3. (Fixes issue 314.) [AJ]
+
+2011/10/27
+----------
+* [Default theme] Fixed the pref controlling timing segments on song meter. [FSX]
+
+2011/10/18
+----------
+* [LightsManager] Use song beat for menu button lights, allow demonstration to
+ flash pad lights when BlinkGameplayButtonLightsOnNote is true, light custom
+ game buttons when pressed during attract mode, general optimizations. [vyhd]
+
+2011/10/17
+----------
+* [ScreenEdit/NoteField] Fix an editor crash when you exit without saving
+ after creating new steps. [Wolfman2000]
+
+2011/10/16
+----------
+* [NoteDataUtil] Add the Backwards mod for games where the intended
+ definition of Mirror is different. Regarding Pump gameplay, what was
+ called Mirror in Preview 4 is considered Backwards now, and the original
+ Mirror is back in its old position. [Wolfman2000]
+
+2011/10/12
+----------
+* [Steps] Fix a bug where e.g. ".SM" ".DWI" ".Sm" ".sM" files
+ wouldn't properly load since the code was expecting lowercase. [AJ]
+
+2011/10/10
+----------
+* [NotesLoaderBMS] Add the time signature segments. [theDtTvB]
+
+2011/10/09
+----------
+* [NotesLoaderBMS] Fix the bug where keysounds that points to nonexistant file
+ gets assigned a random one. [theDtTvB]
+* [NotesLoaderBMS] Use BMSLoader to load PMS files. [theDtTvB]
+* [RageSoundReader_WAV] Fix ADPCM support. [theDtTvB]
+
+2011/10/08
+----------
+* [GameSoundManager] Add the PlayMusicPart lua binding. [Wolfman2000]
+* [ScreenEdit] Add the FadeInPreview and FadeOutPreview metrics. This controls
+ how long the fade in and fade outs are for playing the preview music.
+ The default values are 0 and 1.5 respectively. [Wolfman2000]
+
+2011/10/07
+----------
+* [RageDisplay] Add the GetFPS, GetVPF, and GetCumFPS bindings. [Wolfman2000]
+
+2011/10/06
+----------
+* Various scoring fixes sourced from http://www47.atwiki.jp/waiei/pages/21.html
+ [A.C/@waiei, 桜為å°é³©/@sakuraponila]
+
+================================================================================
+StepMania 5.0 Preview 4 | 20111005
+--------------------------------------------------------------------------------
+
+2011/10/04
+----------
+* [NoteDataUtil] More accurate Left, Right, and Mirror mods for Pump gameplay.
+ Major thanks to Hudson Felker and Bill Shillito here. [Wolfman2000]
+
+2011/10/01
+----------
+* [ScreenHighScores] Disable forced screen transition behavior when
+ ManualScrolling=true. [AJ]
+
+2011/09/30
+----------
+* [GameState] Added CurrentOptionsDisqualifyPlayer(player),
+ ApplyPreferredModifiers(player,string) and ApplyStageModifiers(player,string)
+ Lua bindings. [AJ]
+
+2011/09/29
+----------
+* [Fallback theme] Fix ImmediateHoldLetGo function. [Wolfman2000]
+* [GameState] Add the EditAllowedForExtra metric. Use this if you want edit
+ steps to be allowed for accessing the extra stage. By default, this is
+ false. [Wolfman2000]
+
+2011/09/26
+----------
+* [Default theme] Added Song Timing Display user preference. [AJ]
+* [ThemeManager] Add global Scripts dir. [shakesoda]
+
+2011/09/25
+----------
+* [WheelItemBase] Added GetColor and GetText Lua bindings. [AJ]
+
+2011/09/24
+----------
+* [ScreenEdit] Disable shifting timing changes down one beat if starting on
+ beat 0. Important information must stay on that beat. [Wolfman2000]
+* [ScreenEdit] Disable converting rows to a stop or beat starting on beat 0.
+ There should be no reason for this at this time. [Wolfman2000]
+* [MusicWheelItem] Add/reinstate MusicWheelItem Mode Normal/Color/OverPart. [AJ]
+* [FadingBanner] Added LoadFromSortOrder(SortOrder) Lua binding. [AJ]
+
+2011/09/23
+----------
+* [ScreenEvaluation] Added RollingNumbersMaxComboClass metric. [AJ]
+* [NotesLoaderSM] Fix loading .sm files with non standard difficulty names.
+ It should be Hard, not Heavy. [Wolfman2000]
+
+2011/09/22
+----------
+* [ScreenDebugOverlay] Replaced hardcoded toggle command with
+ ButtonTextToggledCommand metric. [AJ]
+* [LoadingWindow_Win32] Make the StepMania window gain focus after the
+ loading window closes. Fixes issue 424. [AJ]
+
+2011/09/21
+----------
+* [FadingBanner] Added LoadRandom(), LoadRoulette(), LoadFallback(),
+ LoadCourseFallback(), and GetBanner(int) Lua bindings. [AJ]
+
+2011/09/18
+----------
+* [Song] Added GetSampleStart() and GetSampleLength() Lua bindings. [Wolfman2000]
+
+2011/09/16
+----------
+* [UnlockManager] Added GetNumLockedSongs() Lua binding. [Wolfman2000]
+* [UnlockManager] Added IsSongLocked() Lua binding. [Wolfman2000]
+
+2011/09/12
+----------
+* [NotesLoaderSSC/WriterSSC] Allow all timing tags regardless of what timing
+ is used. [Wolfman2000]
+
+2011/09/11
+----------
+* [ScreenEvaluation] Added "evaluation full combo W1" and
+ "evaluation full combo W2" announcer cues. [AJ]
+* [Banner] Added "Banner group fallback" graphic. [AJ]
+
+2011/09/09
+----------
+* [NotesLoaderBMS] Rewrite the BMS loader, should fix issues 430 and 500. [theDtTvB]
+
+2011/09/08
+----------
+* [GameManager] Fix shifting of 2P notes in beat mode. [1a2a3a2a1a]
+
+2011/09/07
+----------
+* [Model] Added GetDefaultAnimation() Lua binding. [AJ]
+* [GameState] Added GetEarnedExtraStage() Lua binding. [AJ]
+
+2011/09/02
+----------
+* [MenuTimer] Added start(), disable() Lua bindings. Also renamed setseconds to
+ SetSeconds to match GetSeconds. [AJ]
+* [GameManager] beat "versus" -> "versus5"; fix beat versus7 being "single7". [1a2a3a2a1a]
+
+2011/08/27
+----------
+* Updated libjpeg to 8c.
+* [SongManager] Added GetCoursesInGroup(sCourseGroup,bIncludeAutogen),
+ GetSongGroupBannerPath(songGroup), GetCourseGroupBannerPath(courseGroup),
+ DoesSongGroupExist(songGroup), DoesCourseGroupExist(courseGroup) and
+ GetPopularSongs() Lua bindings. [AJ]
+* [SongManager] Added GetPreferredSortSongs(), GetPreferredSortCourses(courseType,bIncludeAutogen),
+ and GetPopularCourses(courseType) Lua bindings. [AJ]
+* [SongManager] Add SongToPreferredSortSectionName(song), WasLoadedFromAdditionalSongs(song),
+ and WasLoadedFromAdditionalCourses(course) Lua bindings. [AJ]
+* [CryptManager] Add GenerateRandomUUID() Lua binding. [AJ]
+* [ThemeManager] Added DoesThemeExist(sTheme), IsThemeSelectable(sTheme),
+ DoesLanguageExist(sLang), GetCurThemeName(), HasMetric(sGroup,sValue), and
+ HasString(sGroup,sValue) Lua bindings. [AJ]
+
+2011/08/23
+----------
+* [Makefile.am] Fixed version date and time handling. [AJ]
+
+2011/08/22
+----------
+* [PrefsManager, X11Helper] Added ShowMouseCursor preference. [AJ]
+* [UnlockManager] Added GetStepOfAllTypes Lua binding. This gets the locked
+ Steps for all game types based on the difficulty specified. [Wolfman2000]
+* [UnlockManager] Added requirepasschallengesteps Lua binding. This is more
+ self-explanitory: pass challenge to be able to play edits. [Wolfman2000]
+
+2011/08/21
+----------
+* [NotesLoaderSSC] Fix loading pre-split timing files that had blank timing
+ tags inside of them. Thanks to Vin.il for the catch. [Wolfman2000]
+* [Song] Added Jacket, CD image (a la early DDR), and Disc (PIU-style) support.
+ Added GetJacketPath(), GetCDImagePath(), GetDiscPath(), HasJacket(), HasDisc(),
+ and HasCDImage() Lua bindings. [AJ]
+
+================================================================================
+StepMania 5.0 Preview 3 | 20110820
+--------------------------------------------------------------------------------
+
+2011/08/20
+----------
+* [PlayerOptions] Add GetMMod() Lua binding. [AJ]
+* [Player] Make keysounds respect volume preference. Fixes issue 344. [AJ]
+
+2011/08/19
+----------
+* [Steps] Add PredictMeter() and GetDisplayBPMType() Lua bindings. [AJ]
+* [Song] Add ShowInDemonstrationAndRanking() Lua binding. [AJ]
+* Turn off Autogen by default. [shakesoda]
+* Disable automatic aspect ratio guessing, default to 854x480
+ (16:9 because most newer displays are wide). [shakesoda]
+* Turn on FastLoad and FastLoadAdditionalSongs by default. [shakesoda]
+
+2011/08/18
+----------
+* [RageInput] Added "No input devices were loaded." string to languages. [AJ]
+* [RageInputDevice] Added localized names for InputDeviceState. [AJ]
+* [Course] Add IsPlayableIn(StepsType) and IsRanking() Lua bindings. [AJ]
+* [Trail] Added GetTotalMeter(), GetLengthSeconds(), IsSecret()
+ and ContainsSong(song) Lua bindings. [AJ]
+
+2011/08/16
+----------
+* Added PrettyPercent(numerator,denominator) Lua binding. [AJ]
+
+2011/08/14
+----------
+* [Foreground] Restore Foreground Changes for use in gameplay. Note that it
+ is recommended to use lua for #FGCHANGES from now on: not all XML changes
+ will work. [infamouspat]
+
+2011/08/13
+----------
+* [Theme-side] Added Fancy UI Background preference to Theme Options. [AJ]
+* [LowLevelWindow_X11] Don't force the window into the upper left corner. [ZipFile]
+
+2011/08/07
+----------
+* [LifeMeterBattery] Added LostLife param to LifeChanged message. [AJ]
+* [LifeMeterBattery] Converted LifeMeterBattery lives to an AutoActor. [AJ]
+* [TimingData] Add HasDelays() Lua binding; HasStops() now only checks stops. [AJ]
+* [GameState, SongUtil] Fix Issue 263 by not charging 2x stages for doubles when
+ not using joint premium. [AJ]
+* [BeginnerHelper] Made BeginnerHelper run the OnCommand. [AJ]
+* [GameState] add GetExpandedSectionName() Lua binding. [AJ]
+* [ScreenSelectMusic] Added IdleCommentSeconds metric and
+ "ScreenSelectMusic IdleComment" announcer sound. [AJ]
+* [NotesLoaderBMS] "Send the actual song file to LoadFromBMSFile in
+ BMSLoader::LoadNoteDataFromSimfile instead of the dummy one...
+ This fixes the wrong sound issue [423]..." [theDtTvB]
+
+2011/08/06
+----------
+* [NoteSkins/beat/default] Fix Issue 425. [AJ]
+* [ScoreDisplayRave] Allow (Meter/Level)(X/Y) metrics to work again. [AJ]
+
+2011/08/05
+----------
+* [NoteField] Added AreaHighlightColor metric. [AJ]
+
+2011/08/04
+----------
+* [NoteTypes, ScreenEdit] Removed artificial MAX_NOTES_PER_MEASURE limit. [AJ]
+
+2011/08/02
+----------
+* [NotesSSC] Only write timing/attack tags for the step if there is a
+ difference from the song. For timing tags, at this time it means that if even
+ one tag is different, all tags are written. [Wolfman2000]
+
+2011/08/01
+----------
+* [MusicWheel, RoomWheel] Moved the "- EMPTY -" string to the languages file. [AJ]
+
+2011/07/31
+----------
+* [ScreenGameplay, LyricDisplay] Stop lyrics from animating on failure.
+ Fixes issue 298. [AJ]
+
+2011/07/30
+----------
+* [ProfileManager] Fix an issue when deleting recently created profiles. [AJ]
+* Start removing anything related to Guitar mode. This was rushed in, and it
+ is not worth us keeping at this time. [Wolfman2000]
+
+2011/07/26
+----------
+* [ScreenEdit] Add a semi working implementation of the often requested
+ copy/paste selected timing data feature. This should make it easier for
+ some charters. [Wolfman2000]
+
+2011/07/21
+----------
+* [BeginnerHelper] Removed DancePadAngle metric in favor of DancePadOnCommand.
+ The same goes for PlayerAngle, dancer rotation is now handled in
+ PlayerP1/2OnCommand. [AJ]
+* [Course] Bumped up max edit course title length to 16 (still feels too short).
+ Also added #DESCRIPTION tag and Course:GetDescription() Lua binding. [AJ]
+
+2011/07/20
+----------
+* [Win32/CrashHandlerChild] Crashlog and log now open in the player's default
+ text editor. Also, the Show Log button works again, including for people using
+ Portable.ini. [AJ]
+
+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]
+* [AnnouncerManager] Fixed a bug where no announcers would be loaded. [AJ]
+* Restored the UserPrefAutoSetStyle behavior. [Wolfman2000]
+* [NotesLoaderSMA] Better way of identifying beats and seconds. [Wolfman2000]
+
+================================================================================
+StepMania 5.0 Preview 1a | 20110603
+--------------------------------------------------------------------------------
+
+2011/06/03
+----------
+* [LifeMeterBattery] Added LivesLeft param to LifeChanged message. [AJ]
+* [Windows] Set up directories for pictures and app data in their proper
+ location. [Henke]
+* [NotesLoaderSM] Fix an Offset load bug. [Wolfman2000]
+
+2011/06/02
+----------
+* [BPMDisplay] Added SetFromSteps Lua binding. [AJ]
+* [ScreenDebugOverlay] Switch the R and T keys to be Volume Down and Up
+ respectively. I have to admit, it makes more sense to have volume up be
+ on the right instead of the left. [Wolfman2000]
+* [SongManager] Make autogen courses have "Autogen" as the Scripter. [AJ]
+
+2011/06/01
+----------
+* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000]
+* [ScreenEdit] Fix Song Timing behaviors. [Wolfman2000]
+
+2011/05/31
+----------
+* [Player] Added the BattleRaveMirror metric. This determines if Battle and
+ Rave mode will have the two players with mirrored charts or not. By default,
+ this is set to true, preserving the ITG style behavior. [Wolfman2000]
+* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000]
+
+================================================================================
+StepMania 5.0 Preview 1 | 20110529
+--------------------------------------------------------------------------------
+
+2011/05/27
+----------
+* [ScreenEdit] Added the LoopOnChartEnd metric. Once you get to the end of
+ the chart while playing it in the editor, this controls whether it loops and
+ plays again, or simply stops. By default, this is true, replicating current
+ behavior. Set to false to replicate older StepMania behavior. [Wolfman2000]
+
+2011/05/26
+----------
+* [ScoreKeeperNormal] Added the MissComboIsPerRow metric. Similar to the
+ ComboIsPerRow metric, this determines how much miss combo is earned on missing
+ a row of notes. By default, this is true. Set to false to replicate Pump Pro
+ behavior. [Wolfman2000]
+
+2011/05/25
+----------
+* [NotesLoaderSSC/NotesWriterSSC] Added the ScrollSegments. Think BPM change,
+ but not. [theDtTvB]
+
+2011/05/23
+----------
+* [Steps] Added the UsesSplitTiming Lua binding. [Wolfman2000]
+
+2011/05/20
+----------
+* [CryptManager] Added SHA1File Lua binding. [AJ]
+
+2011/05/19
+----------
+* [BPMDisplay] Add CourseCycleSpeed metric. [AJ]
+
+2011/05/17
+----------
+* [NotesWriterSM] Write out OpenITG compatible SM files from here on out.
+ This includes turning Warps into Negative Stops. For those that wanted
+ negative BPMs specifically, my apologies, but stops are easier on math.
+ [Wolfman2000]
+
+2011/05/16
+----------
+* [ProfileManager] Added ProfileWasLoadedFromMemoryCard(PlayerNumber)
+ Lua binding. [AJ]
+* Added #FAKES to the SSC format. Similar to the fake arrows, these blocks
+ prevent all judgments within the range. [Wolfman2000]
+* Changed the syntax of #WARPS slightly. Now the second value is the relative
+ distance that is skipped, not the absolute value when you start hitting
+ arrows again. [Wolfman2000]
+
+2011/05/15
+----------
+* [ScreenGameplay] Removed hardcoded commands for Debug (give up text) and
+ replace them with DebugStartOnCommand, DebugBackOnCommand, and
+ DebugTweenOffCommand. [AJ]
+* Added #SPEEDS to the SSC format. This multiplies your scrolling speed during
+ gameplay, not replaces it (see mod attacks for replacing). [Wolfman2000]
+
+2011/05/14
+----------
+* [ModIcon] Added StopWords metric. [AJ]
+* [ScreenSelectMaster] Add "ScreenEmpty" param to MenuStartP# when the GameCommand
+ doesn't set a screen. [AJ]
+* [StepsDisplay] Added MeterFormatString metric. [AJ]
+* [MusicWheel] Added ShowSectionsInBPMSort and ShowSectionsInLengthSort metrics. [AJ]
+* [ScreenEvaluation] Stop the Bonus bars from overflowing in course modes. [AJ]
+* [Banner] Added ScrollMode and ScrollSortOrder metrics. [AJ]
+
+2011/05/13
+----------
+* Added Split Timing to .SSC files. All older .SSC files and other file
+ formats are converted to split timing on cache load. We are no longer bound
+ by Song Timing for everything. [theDtTvB, Wolfman2000, TeruFSX]
+
+2011/05/11
+----------
+* [GameSoundManager] Added PlayAnnouncer Lua binding. [AJ]
+* [AnnouncerManager] Add support for "gameplay combo #" for announcer. [AJ]
+
+2011/05/10
+----------
+* [Sprite] Added SetSecondsIntoAnimation Lua binding. [AJ]
+* [BPMDisplay] Added SetFromCourse Lua binding. [AJ]
+
+2011/05/03
+----------
+* [ScreenEdit] Allow changing the Beat 0 Offset, Music Sample Start, and
+ Music Sample Length via Edit Song Info menu. [Wolfman2000]
+
+2011/05/02
+----------
+* [ScreenSelectMusic] Added NullScoreString metric. [AJ]
+
+2011/04/17
+--------
+* Use lua for all primary score keeping. Course modes right now still use the
+ old fashioned system. [TeruFSX, Wolfman2000]
+
+2011/04/09
+--------
+* [Player] Force hold judgments to take place before setting the score.
+ [theDtTvB]
+
+2011/04/05
+--------
+* [NotesLoaderSSC, NotesWriterSSC] Add the #LABELS tag. This is meant for step
+ editors to label different parts of their stepcharts. Use Control + , or . to
+ jump to different labels made. [Wolfman2000]
+
diff --git a/Docs/CommandLineArgs.txt b/Docs/legacy/CommandLineArgs.txt
similarity index 100%
rename from Docs/CommandLineArgs.txt
rename to Docs/legacy/CommandLineArgs.txt
diff --git a/Docs/Copying.MAD b/Docs/legacy/Copying.MAD
similarity index 98%
rename from Docs/Copying.MAD
rename to Docs/legacy/Copying.MAD
index fbdd65f6f8..d60c31a97a 100644
--- a/Docs/Copying.MAD
+++ b/Docs/legacy/Copying.MAD
@@ -1,340 +1,340 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Docs/CourseFormat.txt b/Docs/legacy/CourseFormat.txt
similarity index 100%
rename from Docs/CourseFormat.txt
rename to Docs/legacy/CourseFormat.txt
diff --git a/Docs/CustomMissionReference.txt b/Docs/legacy/CustomMissionReference.txt
similarity index 100%
rename from Docs/CustomMissionReference.txt
rename to Docs/legacy/CustomMissionReference.txt
diff --git a/Docs/Devdocs/BuildingFfmpegOnMac.txt b/Docs/legacy/Devdocs/BuildingFfmpegOnMac.txt
similarity index 100%
rename from Docs/Devdocs/BuildingFfmpegOnMac.txt
rename to Docs/legacy/Devdocs/BuildingFfmpegOnMac.txt
diff --git a/Docs/Devdocs/CodingStyle.txt b/Docs/legacy/Devdocs/CodingStyle.txt
similarity index 100%
rename from Docs/Devdocs/CodingStyle.txt
rename to Docs/legacy/Devdocs/CodingStyle.txt
diff --git a/Docs/Devdocs/CompileFlags.txt b/Docs/legacy/Devdocs/CompileFlags.txt
similarity index 100%
rename from Docs/Devdocs/CompileFlags.txt
rename to Docs/legacy/Devdocs/CompileFlags.txt
diff --git a/Docs/Devdocs/GoldenRules.txt b/Docs/legacy/Devdocs/GoldenRules.txt
similarity index 100%
rename from Docs/Devdocs/GoldenRules.txt
rename to Docs/legacy/Devdocs/GoldenRules.txt
diff --git a/Docs/Devdocs/NegBPMsTutorial.html b/Docs/legacy/Devdocs/NegBPMsTutorial.html
similarity index 98%
rename from Docs/Devdocs/NegBPMsTutorial.html
rename to Docs/legacy/Devdocs/NegBPMsTutorial.html
index ee9d34f0c7..932f9986e1 100644
--- a/Docs/Devdocs/NegBPMsTutorial.html
+++ b/Docs/legacy/Devdocs/NegBPMsTutorial.html
@@ -1,130 +1,130 @@
-
-
-Negative BPM/Stop Tutorial by WinDEU
-
-
-
-Hello everyone, and welcome to WinDEU's Negative BPM tutorial! Making negative
-BPMs is pretty complex, so hopefully this guide will help you guys out.
-
-NOTE: I am using
-SM 3.95 for this tutorial. 3.9 works as well, and is probably better to use
-for playback purposes. When a negative BPM hits in edit mode, 3.95 jumps very
-quickly (but not instantly) to the next point in the chart, whereas 3.9 does
-do it instantly.
-
-What are negative BPMs?
-Negative BPMs are the act of "warping" to a
-later place in the chart , skipping multiple lines of the chart and
-ignoring anything within those areas.
-
-Once you understand how negative BPMs work, it shouldn't be too hard to
-figure out.
-
-So, let's start out with a screenshot.
-
-
-
-We start off on measure 1, with a current second of 0.055, and a BPM of 150.
-Take note of the current second (upper right), this is very important in
-dealing with negative BPMs.
-
-
-
-We are now on measure 2, with a BPM of -150, the exact opposite of the normal
-BPM. Look at the current second again. It took 1.600 seconds to scroll 1
-whole measure at 150 BPM. Right now the current second is 1.655. Also of
-note, the BPM goes back to 150 starting on measure 3. Now, here's where the
-magic happens.
-
-
-We are on measure 3, back into positive BPM territory, but take a look at the
-current second again. It is 0.055 on measure 3, the same value as the current
-second from measure 1. This makes sense, because it took -1.600 seconds to
-scroll from measure 2 to measure 3, because the BPM was negative during that
-measure.
-
-
-As you can see from the current second on measure 4, it is the same value as measure 2.
-
-This is how the warping happens. When the chart first reaches the negative BPM,
-it will search for the next positive BPM value.
-NOTE: if there is no
-positive BPM after the last negative BPM, I believe that the song ends
-instantly, because it has reached the highest time possible within the chart.
-Once the negative BPM hits, the current second will start counting backwards
-forever.
-
-So, once the negative BPM hits, the game attempts to find the next place in
-the chart that matches the current second of
-the exact moment the negative BPM hit. At measure 2, the current second
-was 1.655, and from the picture above, we can see that the next place that the
-current second is 1.655 would be measure 4. So, you've effectively created a
-warp going from measure 2 to measure 4, skipping everything in between.
-
-
-
-So basically, it comes down to this: When making negative BPMs, make sure that
-the space between the negative BPM and the next positive BPM is
-doubled (assuming that you're using
-the same BPM, which would be the easiest method anyway).
-
-Negative Stops
-
-Negative stops work about the same way as negative BPMs, without the mess
-of having to change around the BPMs. There is a little math involved, though.
-
-Let's say that you want to do a 2-measure warp, like the negative BPM example
-above. You need to simulate going backwards by two measures. Normal stops keep
-the current second going, even though the chart is at a standstill. Negative
-stops keep the current second going as well, only backwards.
-
-First, find the time it would take to progress two measures. You can do this
-by either checking the current second, going down two measures, check the
-current second again, and take the difference. Or, you can calculate it like this:
-
-60/[BPM] = [quarter note value, in seconds]
-[quarter note] x 8 = [2 measures, in seconds]
-
-So that translates to:
-
-60/150 = 0.400
-0.400 x 8 = 3.200 seconds = two measures
-
-Now that we've got that out of the way, it's time to make the negative stop.
-You might have noticed something though. StepMania doesn't let you input
-negative stops. F9 to decrease the stop values in edit mode doesn't let you
-go below 0.00, and adding a negative stop through Add Stop from the menu
-doesn't work either.
-
-Unfortunately, you'll have to manually insert the negative stop into the .sm
-file. NOTE: Before you
-manually insert any negative stops, make sure to save your chart, otherwise
-any unsaved data will be lost!
-
-This time, take note of the current beat
-(again, upper right). Now, open up the .sm file and look for the #STOPS tag.
-If you want to add a -3.200 long stop in at measure 2, it will look like this:
-
-#STOPS:4.000=-3.200;
-
-After you're done, save the .sm, and go back to StepMania (which should still
-be open). Press ESC, and go to the menu option "Revert From Disk." It will
-warn you that any unsaved changes will be lost (which is why I gave the warning
-before explaining all of this). Choose yes, and you should see the negative
-stop value appear on measure 2.
-
-
-
-If you scroll to measure 2, and then to measure 4, you will see that the
-current second values are the same, meaning that you've successfully created
-a warp with negative stops!
-
-NOTE: Using a lot of
-negative stops in a short period of time tends to lag ITG machines a lot,
-so be wary of this.
-
-That covers the basics of negative BPMs and negative stops. Hopefully this guide helps!
-
+
+
+Negative BPM/Stop Tutorial by WinDEU
+
+
+
+Hello everyone, and welcome to WinDEU's Negative BPM tutorial! Making negative
+BPMs is pretty complex, so hopefully this guide will help you guys out.
+
+NOTE: I am using
+SM 3.95 for this tutorial. 3.9 works as well, and is probably better to use
+for playback purposes. When a negative BPM hits in edit mode, 3.95 jumps very
+quickly (but not instantly) to the next point in the chart, whereas 3.9 does
+do it instantly.
+
+What are negative BPMs?
+Negative BPMs are the act of "warping" to a
+later place in the chart , skipping multiple lines of the chart and
+ignoring anything within those areas.
+
+Once you understand how negative BPMs work, it shouldn't be too hard to
+figure out.
+
+So, let's start out with a screenshot.
+
+
+
+We start off on measure 1, with a current second of 0.055, and a BPM of 150.
+Take note of the current second (upper right), this is very important in
+dealing with negative BPMs.
+
+
+
+We are now on measure 2, with a BPM of -150, the exact opposite of the normal
+BPM. Look at the current second again. It took 1.600 seconds to scroll 1
+whole measure at 150 BPM. Right now the current second is 1.655. Also of
+note, the BPM goes back to 150 starting on measure 3. Now, here's where the
+magic happens.
+
+
+We are on measure 3, back into positive BPM territory, but take a look at the
+current second again. It is 0.055 on measure 3, the same value as the current
+second from measure 1. This makes sense, because it took -1.600 seconds to
+scroll from measure 2 to measure 3, because the BPM was negative during that
+measure.
+
+
+As you can see from the current second on measure 4, it is the same value as measure 2.
+
+This is how the warping happens. When the chart first reaches the negative BPM,
+it will search for the next positive BPM value.
+NOTE: if there is no
+positive BPM after the last negative BPM, I believe that the song ends
+instantly, because it has reached the highest time possible within the chart.
+Once the negative BPM hits, the current second will start counting backwards
+forever.
+
+So, once the negative BPM hits, the game attempts to find the next place in
+the chart that matches the current second of
+the exact moment the negative BPM hit. At measure 2, the current second
+was 1.655, and from the picture above, we can see that the next place that the
+current second is 1.655 would be measure 4. So, you've effectively created a
+warp going from measure 2 to measure 4, skipping everything in between.
+
+
+
+So basically, it comes down to this: When making negative BPMs, make sure that
+the space between the negative BPM and the next positive BPM is
+doubled (assuming that you're using
+the same BPM, which would be the easiest method anyway).
+
+Negative Stops
+
+Negative stops work about the same way as negative BPMs, without the mess
+of having to change around the BPMs. There is a little math involved, though.
+
+Let's say that you want to do a 2-measure warp, like the negative BPM example
+above. You need to simulate going backwards by two measures. Normal stops keep
+the current second going, even though the chart is at a standstill. Negative
+stops keep the current second going as well, only backwards.
+
+First, find the time it would take to progress two measures. You can do this
+by either checking the current second, going down two measures, check the
+current second again, and take the difference. Or, you can calculate it like this:
+
+60/[BPM] = [quarter note value, in seconds]
+[quarter note] x 8 = [2 measures, in seconds]
+
+So that translates to:
+
+60/150 = 0.400
+0.400 x 8 = 3.200 seconds = two measures
+
+Now that we've got that out of the way, it's time to make the negative stop.
+You might have noticed something though. StepMania doesn't let you input
+negative stops. F9 to decrease the stop values in edit mode doesn't let you
+go below 0.00, and adding a negative stop through Add Stop from the menu
+doesn't work either.
+
+Unfortunately, you'll have to manually insert the negative stop into the .sm
+file. NOTE: Before you
+manually insert any negative stops, make sure to save your chart, otherwise
+any unsaved data will be lost!
+
+This time, take note of the current beat
+(again, upper right). Now, open up the .sm file and look for the #STOPS tag.
+If you want to add a -3.200 long stop in at measure 2, it will look like this:
+
+#STOPS:4.000=-3.200;
+
+After you're done, save the .sm, and go back to StepMania (which should still
+be open). Press ESC, and go to the menu option "Revert From Disk." It will
+warn you that any unsaved changes will be lost (which is why I gave the warning
+before explaining all of this). Choose yes, and you should see the negative
+stop value appear on measure 2.
+
+
+
+If you scroll to measure 2, and then to measure 4, you will see that the
+current second values are the same, meaning that you've successfully created
+a warp with negative stops!
+
+NOTE: Using a lot of
+negative stops in a short period of time tends to lag ITG machines a lot,
+so be wary of this.
+
+That covers the basics of negative BPMs and negative stops. Hopefully this guide helps!
+
\ No newline at end of file
diff --git a/Docs/Devdocs/SMLanProtocol.txt b/Docs/legacy/Devdocs/SMLanProtocol.txt
similarity index 100%
rename from Docs/Devdocs/SMLanProtocol.txt
rename to Docs/legacy/Devdocs/SMLanProtocol.txt
diff --git a/Docs/Devdocs/SMO_protocol-aj.txt b/Docs/legacy/Devdocs/SMO_protocol-aj.txt
similarity index 100%
rename from Docs/Devdocs/SMO_protocol-aj.txt
rename to Docs/legacy/Devdocs/SMO_protocol-aj.txt
diff --git a/Docs/Devdocs/SMXML.txt b/Docs/legacy/Devdocs/SMXML.txt
similarity index 100%
rename from Docs/Devdocs/SMXML.txt
rename to Docs/legacy/Devdocs/SMXML.txt
diff --git a/Docs/Devdocs/Sound Drivers.txt b/Docs/legacy/Devdocs/Sound Drivers.txt
similarity index 100%
rename from Docs/Devdocs/Sound Drivers.txt
rename to Docs/legacy/Devdocs/Sound Drivers.txt
diff --git a/Docs/Devdocs/SplitTiming.txt b/Docs/legacy/Devdocs/SplitTiming.txt
similarity index 98%
rename from Docs/Devdocs/SplitTiming.txt
rename to Docs/legacy/Devdocs/SplitTiming.txt
index 26470f103f..cc7ad676e4 100644
--- a/Docs/Devdocs/SplitTiming.txt
+++ b/Docs/legacy/Devdocs/SplitTiming.txt
@@ -1,96 +1,96 @@
-This document describes the implementation of TimingData in StepMania, as of
-shortly after version 5.0 beta 1a.
-
-
-== What is TimingData? ==
-
-TimingData refers to the information in a chart (a "Steps") or a song which
-maps real time to beats and vice versa. This includes all BPMs and the
-initial offset, as well as time gimmicks like stops, warps, and delays. The
-TimingData object itself only has a few members:
-* the name of the file that specified the data (for display only)
-* the beat 0 offset
-* a vector of TimingSegments for each type (BPM, warp, label, etc.)
-
-Each TimingSegment specifies a starting point in the chart, as well as any
-parameters which are specific to that segment type. For a list of the
-different types of TimingSegments, see TimingSegments.h.
-
-
-== Split Timing ==
-
-TimingData is primarily used for charts and songs, to specify the BPM and
-offset and to implement gimmicks, as well as to synchronize effects with
-background music. (It also provides features such as labels and time
-signatures which can be useful when editing a chart.)
-
-Prior to StepMania 5, each song had a single TimingData structure which was
-then used by all of the charts associated with that song. StepMania 5
-introduces a feature known as Split Timing, wherein a chart can have
-individual TimingData ("Steps Timing") which is independent of the song's
-TimingData ("Song Timing"). This allows for Pump-style gimmicks which can
-differ between difficulties on the same song.
-
-
-== Implementation ==
-
-In the code, Song Timing is contained in the m_SongTiming field of a Song
-object. Song Timing is used by default for any chart which does not specify
-its own timing information.
-
-If a chart has its own timing information, this is contained in the m_Timing
-field of the Steps object. If the chart does not have separate timing
-information, the m_Timing structure will be empty (i.e. none of the vectors
-will contain any TimingSegments). The TimingData::empty() function provides a
-simply way to determine this.
-
-The most common way to get the TimingData for a chart is to use the
-GetTimingData() function of the Steps object. This function will perform the
-appropriate fallback to Song Timing if the chart's timing is empty. If, as in
-the editor or sync implementations, it is necessary to access the Steps Timing
-or Song Timing individually, the corresponding fields can be used instead.
-
-=== Editing ===
-
-The editor has a "timing mode" setting which can be toggled between Song
-Timing and Steps Timing (in the code, GAMESTATE->m_bIsUsingStepTiming). This
-mode determines which set of TimingData will be updated when changes are made
-with hotkeys or the Timing menu. It defaults to Steps Timing if the chart
-being loaded has individual TimingData, and Song Timing otherwise.
-Considering that we also want this to behave according to whether a chart has
-individual timing, there are four possibilities when making a change:
-
-1. Song Timing mode, chart DOES NOT HAVE individual timings: changes will be
- made to the Song Timing, and the chart will not have individual timings
- added to it. Because of this, the changes to Song Timing will "show
- through" to this chart.
-2. Song Timing mode, chart HAS individual timings: changes will be made to the
- Song Timing only. The timings in the chart will be left untouched. Because
- of this, the changes to Song Timing will not affect this chart.
-3. Steps Timing mode, chart HAS individual timings: changes will be made to the
- Steps Timing only and will affect only this chart.
-4. Steps Timing mode, chart DOES NOT HAVE individual timings: first, the Song
- Timing will be copied into this chart. The changes are then made to the
- Steps Timing only and will affect only this chart.
-
-Case #4 describes how Steps Timing is added to a chart: simply select Steps
-Timing mode and start making changes. To remove Steps Timing, use the
-corresponding item in the Timing menu.
-
-
-== File formats ==
-
-A quick note is in order about Split Timing support in the different file
-formats supported by StepMania:
-
-* SSC files support Split Timing natively. Timing tags such as #BPMS in the
- file header apply to the song, whereas the same tags inside a #NOTEDATA
- section apply only to the current chart.
-* SM files do not support Split Timing, since there is no way to specify
- individual timing for a chart.
-* SMA files support Split Timing in a similar fashion to SSC files.
-* The KSF and BMS formats use one file for each chart, and therefore already
- have per-chart timing information. When reading these formats, *every
- chart* has Steps Timing.
-* The DWI format does not support Split Timing, so Steps Timing is not written
- to DWI files.
+This document describes the implementation of TimingData in StepMania, as of
+shortly after version 5.0 beta 1a.
+
+
+== What is TimingData? ==
+
+TimingData refers to the information in a chart (a "Steps") or a song which
+maps real time to beats and vice versa. This includes all BPMs and the
+initial offset, as well as time gimmicks like stops, warps, and delays. The
+TimingData object itself only has a few members:
+* the name of the file that specified the data (for display only)
+* the beat 0 offset
+* a vector of TimingSegments for each type (BPM, warp, label, etc.)
+
+Each TimingSegment specifies a starting point in the chart, as well as any
+parameters which are specific to that segment type. For a list of the
+different types of TimingSegments, see TimingSegments.h.
+
+
+== Split Timing ==
+
+TimingData is primarily used for charts and songs, to specify the BPM and
+offset and to implement gimmicks, as well as to synchronize effects with
+background music. (It also provides features such as labels and time
+signatures which can be useful when editing a chart.)
+
+Prior to StepMania 5, each song had a single TimingData structure which was
+then used by all of the charts associated with that song. StepMania 5
+introduces a feature known as Split Timing, wherein a chart can have
+individual TimingData ("Steps Timing") which is independent of the song's
+TimingData ("Song Timing"). This allows for Pump-style gimmicks which can
+differ between difficulties on the same song.
+
+
+== Implementation ==
+
+In the code, Song Timing is contained in the m_SongTiming field of a Song
+object. Song Timing is used by default for any chart which does not specify
+its own timing information.
+
+If a chart has its own timing information, this is contained in the m_Timing
+field of the Steps object. If the chart does not have separate timing
+information, the m_Timing structure will be empty (i.e. none of the vectors
+will contain any TimingSegments). The TimingData::empty() function provides a
+simply way to determine this.
+
+The most common way to get the TimingData for a chart is to use the
+GetTimingData() function of the Steps object. This function will perform the
+appropriate fallback to Song Timing if the chart's timing is empty. If, as in
+the editor or sync implementations, it is necessary to access the Steps Timing
+or Song Timing individually, the corresponding fields can be used instead.
+
+=== Editing ===
+
+The editor has a "timing mode" setting which can be toggled between Song
+Timing and Steps Timing (in the code, GAMESTATE->m_bIsUsingStepTiming). This
+mode determines which set of TimingData will be updated when changes are made
+with hotkeys or the Timing menu. It defaults to Steps Timing if the chart
+being loaded has individual TimingData, and Song Timing otherwise.
+Considering that we also want this to behave according to whether a chart has
+individual timing, there are four possibilities when making a change:
+
+1. Song Timing mode, chart DOES NOT HAVE individual timings: changes will be
+ made to the Song Timing, and the chart will not have individual timings
+ added to it. Because of this, the changes to Song Timing will "show
+ through" to this chart.
+2. Song Timing mode, chart HAS individual timings: changes will be made to the
+ Song Timing only. The timings in the chart will be left untouched. Because
+ of this, the changes to Song Timing will not affect this chart.
+3. Steps Timing mode, chart HAS individual timings: changes will be made to the
+ Steps Timing only and will affect only this chart.
+4. Steps Timing mode, chart DOES NOT HAVE individual timings: first, the Song
+ Timing will be copied into this chart. The changes are then made to the
+ Steps Timing only and will affect only this chart.
+
+Case #4 describes how Steps Timing is added to a chart: simply select Steps
+Timing mode and start making changes. To remove Steps Timing, use the
+corresponding item in the Timing menu.
+
+
+== File formats ==
+
+A quick note is in order about Split Timing support in the different file
+formats supported by StepMania:
+
+* SSC files support Split Timing natively. Timing tags such as #BPMS in the
+ file header apply to the song, whereas the same tags inside a #NOTEDATA
+ section apply only to the current chart.
+* SM files do not support Split Timing, since there is no way to specify
+ individual timing for a chart.
+* SMA files support Split Timing in a similar fashion to SSC files.
+* The KSF and BMS formats use one file for each chart, and therefore already
+ have per-chart timing information. When reading these formats, *every
+ chart* has Steps Timing.
+* The DWI format does not support Split Timing, so Steps Timing is not written
+ to DWI files.
diff --git a/Docs/Devdocs/TextEntry.txt b/Docs/legacy/Devdocs/TextEntry.txt
similarity index 100%
rename from Docs/Devdocs/TextEntry.txt
rename to Docs/legacy/Devdocs/TextEntry.txt
diff --git a/Docs/Devdocs/WarpNotes.txt b/Docs/legacy/Devdocs/WarpNotes.txt
similarity index 100%
rename from Docs/Devdocs/WarpNotes.txt
rename to Docs/legacy/Devdocs/WarpNotes.txt
diff --git a/Docs/Devdocs/ezsockets.txt b/Docs/legacy/Devdocs/ezsockets.txt
similarity index 100%
rename from Docs/Devdocs/ezsockets.txt
rename to Docs/legacy/Devdocs/ezsockets.txt
diff --git a/Docs/Devdocs/interesting_sm4_commit_logs.txt b/Docs/legacy/Devdocs/interesting_sm4_commit_logs.txt
similarity index 100%
rename from Docs/Devdocs/interesting_sm4_commit_logs.txt
rename to Docs/legacy/Devdocs/interesting_sm4_commit_logs.txt
diff --git a/Docs/Devdocs/negbpmtut/screen00214.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00214.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00214.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00214.jpg
diff --git a/Docs/Devdocs/negbpmtut/screen00215.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00215.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00215.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00215.jpg
diff --git a/Docs/Devdocs/negbpmtut/screen00216.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00216.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00216.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00216.jpg
diff --git a/Docs/Devdocs/negbpmtut/screen00217.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00217.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00217.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00217.jpg
diff --git a/Docs/Devdocs/negbpmtut/screen00218.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00218.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00218.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00218.jpg
diff --git a/Docs/Devdocs/negbpmtut/screen00221.jpg b/Docs/legacy/Devdocs/negbpmtut/screen00221.jpg
similarity index 100%
rename from Docs/Devdocs/negbpmtut/screen00221.jpg
rename to Docs/legacy/Devdocs/negbpmtut/screen00221.jpg
diff --git a/Docs/Devdocs/possible memory leaks.txt b/Docs/legacy/Devdocs/possible memory leaks.txt
similarity index 100%
rename from Docs/Devdocs/possible memory leaks.txt
rename to Docs/legacy/Devdocs/possible memory leaks.txt
diff --git a/Docs/Devdocs/rivaldata.txt b/Docs/legacy/Devdocs/rivaldata.txt
similarity index 100%
rename from Docs/Devdocs/rivaldata.txt
rename to Docs/legacy/Devdocs/rivaldata.txt
diff --git a/Docs/Devdocs/versioning.txt b/Docs/legacy/Devdocs/versioning.txt
similarity index 100%
rename from Docs/Devdocs/versioning.txt
rename to Docs/legacy/Devdocs/versioning.txt
diff --git a/Docs/KnownIssues.txt b/Docs/legacy/KnownIssues.txt
similarity index 97%
rename from Docs/KnownIssues.txt
rename to Docs/legacy/KnownIssues.txt
index 04ff7449f6..d84d3763fa 100644
--- a/Docs/KnownIssues.txt
+++ b/Docs/legacy/KnownIssues.txt
@@ -1,53 +1,53 @@
-The following is a list of known issues with StepMania 5.
-
-* The course editor is not working. (It could stand to be rewritten.)
-
-* The scoring system needs to be made global for the game instead
- of tying it to the theme. The current arrangement causes multiple problems
- (themes not supporting scoring unless they explicitly add it to gameplay
- decorations, the last note not being scored, and so on).
-
-* The C and V keys in the editor (related to attacks) still has
- work to go. Crashes should hopefully be minimal if not otherwise
- nonexistant.
-
-* Attacks involving noteskins do not work. They may never work again unless
- some internal coding issues are figured out.
-
-* Routine mode (dance or pump) isn't perfect yet.
- * Attempting to use the Jukebox to show Routine steps will lead to an infinite
- loop that is not escapable short of killing the program.
- * Attempting to select routine mode in the Practice menu causes a crash.
-
-* The attempted unlock code written around Previews 2-4 (?) does not seem to
- work at this time. Assistance may be needed here.
-
-* Hold/Roll heads seem to be draw under preceding taps when they
- shouldn't be all the time.
-
-* C-Mods have not been fully tested with all of the new segments yet.
- Warp segments are ignored when C-Mods are used.
-
-* Split Timing needs adjustments with only one chart in place.
- * Either that, or all tags must be allowable in song timing.
-
-* Language detection fails for Czech and possibly other things on OS X
- (non-fatally, now)
-
-* Japanese font maps are too large and get resized on load to something
- manageable. They should be cut into thirds vertically.
- * This makes debug builds in particular load very slowly, and reduces quality.
-
-* The editor sometimes keeps playing music and won't scroll.
-
-* VBR MP3's don't seek correctly in the editor, which botches sync.
-
-* There is no make install target for linux systems - this is important for
- packaging purposes in particular (it would be great to release .debs!)
-
-* LuaDriver works well, but without threading it has latency issues.
-
-* Survival courses crash if you set a noteskin in the player options
- just before starting the course.
-
-* On some graphics cards, 3D models may cause crashes.
+The following is a list of known issues with StepMania 5.
+
+* The course editor is not working. (It could stand to be rewritten.)
+
+* The scoring system needs to be made global for the game instead
+ of tying it to the theme. The current arrangement causes multiple problems
+ (themes not supporting scoring unless they explicitly add it to gameplay
+ decorations, the last note not being scored, and so on).
+
+* The C and V keys in the editor (related to attacks) still has
+ work to go. Crashes should hopefully be minimal if not otherwise
+ nonexistant.
+
+* Attacks involving noteskins do not work. They may never work again unless
+ some internal coding issues are figured out.
+
+* Routine mode (dance or pump) isn't perfect yet.
+ * Attempting to use the Jukebox to show Routine steps will lead to an infinite
+ loop that is not escapable short of killing the program.
+ * Attempting to select routine mode in the Practice menu causes a crash.
+
+* The attempted unlock code written around Previews 2-4 (?) does not seem to
+ work at this time. Assistance may be needed here.
+
+* Hold/Roll heads seem to be draw under preceding taps when they
+ shouldn't be all the time.
+
+* C-Mods have not been fully tested with all of the new segments yet.
+ Warp segments are ignored when C-Mods are used.
+
+* Split Timing needs adjustments with only one chart in place.
+ * Either that, or all tags must be allowable in song timing.
+
+* Language detection fails for Czech and possibly other things on OS X
+ (non-fatally, now)
+
+* Japanese font maps are too large and get resized on load to something
+ manageable. They should be cut into thirds vertically.
+ * This makes debug builds in particular load very slowly, and reduces quality.
+
+* The editor sometimes keeps playing music and won't scroll.
+
+* VBR MP3's don't seek correctly in the editor, which botches sync.
+
+* There is no make install target for linux systems - this is important for
+ packaging purposes in particular (it would be great to release .debs!)
+
+* LuaDriver works well, but without threading it has latency issues.
+
+* Survival courses crash if you set a noteskin in the player options
+ just before starting the course.
+
+* On some graphics cards, 3D models may cause crashes.
diff --git a/Docs/Licenses.txt b/Docs/legacy/Licenses.txt
similarity index 100%
rename from Docs/Licenses.txt
rename to Docs/legacy/Licenses.txt
diff --git a/Docs/Luadoc/Lua.xml b/Docs/legacy/Luadoc/Lua.xml
similarity index 97%
rename from Docs/Luadoc/Lua.xml
rename to Docs/legacy/Luadoc/Lua.xml
index 8ac6b3a44d..25a18d2a7c 100644
--- a/Docs/Luadoc/Lua.xml
+++ b/Docs/legacy/Luadoc/Lua.xml
@@ -1,3553 +1,3553 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Etterna0.60-git-0e213f9bf1
- 2018-08-20
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Etterna0.60-git-0e213f9bf1
+ 2018-08-20
+
diff --git a/Docs/Luadoc/Lua.xsd b/Docs/legacy/Luadoc/Lua.xsd
similarity index 97%
rename from Docs/Luadoc/Lua.xsd
rename to Docs/legacy/Luadoc/Lua.xsd
index 3edd27c34f..9d680cad2e 100644
--- a/Docs/Luadoc/Lua.xsd
+++ b/Docs/legacy/Luadoc/Lua.xsd
@@ -1,188 +1,188 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Docs/Luadoc/Lua.xsl b/Docs/legacy/Luadoc/Lua.xsl
similarity index 100%
rename from Docs/Luadoc/Lua.xsl
rename to Docs/legacy/Luadoc/Lua.xsl
diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/legacy/Luadoc/LuaDocumentation.xml
similarity index 98%
rename from Docs/Luadoc/LuaDocumentation.xml
rename to Docs/legacy/Luadoc/LuaDocumentation.xml
index c203e47a07..71b17f993c 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/legacy/Luadoc/LuaDocumentation.xml
@@ -1,5734 +1,5734 @@
-
-
-
-
-
-
-
-
-
-
- [02 Colors.lua] Returns a color
with the specified alpha.
-
-
- Use this to make a current value approach a goal value at the given speed. Speed must not be negative. The value will not overshoot the goal.
- Note: When you see the error "approach: speed 1 is negative." it means that the speed value passed was negative. The 1 is there because approach and multiapproach use the same internal function and can be ignored when using approach.
-
-
- [03 CustomSpeedMods.lua]
-
-
- [02 StageMods.lua]
-
-
- [02 StageMods.lua]
-
-
- Issues an error when v
is false
(or nil
). Returns all arguments otherwise. sAssertMessage
is an optional error message (the default is "assertion failed!").
-
-
- Returns the base name of file path.
-
-
- [02 Colors.lua] Boosts the specified color by multiplying its values by fBoost
.
-
-
- [02 Colors.lua] Modifies the brightness of the specified color.
-
-
- [02 Utilities.lua] Returns true
if Center 1P is being used.
-
-
- [03 Gameplay.lua] Returns true
if checkpoint judgments and tap judgments
- are considered separate, or false
otherwise.
-
-
- CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s.
- Erm, I mean... Clamps fValue
between fLow
and fHigh
.
-
-
- [04 KeymapGuard.lua]
-
-
- Closes any connection to an online server.
-
-
- A generic interface to Lua's garbage collector. Performs different functions based on the value of opt
.
-
-
- Returns a color from a string. color
can be in hex ("#FFFFFFFF"
) or 0..1 values ("1.0,1.0,1.0,1.0"
), in RGBA order.
-
-
- [02 Colors.lua] Returns a darker tone of the color. (Specifically c[1]/2, c[2]/2, c[3]/2, c[4]
)
-
-
- [02 Colors.lua] Returns a lighter tone of the color. (Specifically c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4]
)
-
-
- [02 Colors.lua] Returns a midtone of the color. (Specifically c[1]/1.5, c[2]/1.5, c[3]/1.5, c[4]
)
-
-
- [02 Colors.lua] Returns a hex representation for the specified color.
-
-
- [02 Colors.lua] Takes in a color and returns a table with the HSV values.
-
-
- [03 Gameplay.lua] Determines what TapNoteScore allows for continuing the combo.
-
-
- [03 Gameplay.lua] Determines what TapNoteScore allows for maintaining the combo.
-
-
- [03 Gameplay.lua] Determines if combo should be per row (Jump = 1) or per column (Jump = 2).
-
-
- [02 Other.lua] The combo trasform command.
-
-
- [03 Gameplay.lua] Returns the UserPrefComboUnderField
user preference value.
-
-
- This will take the number and insert a comma every three digits, as normal in English for writing large numbers.
- number
can be a string, an integer, or a float.
- comma
is an optional argument that is used instead of a comma.
- "commify(1234, 'cat')" will result in "1cat234".
- dot
is an optional argument that is used instead of a dot to find the end of the part that should be commified.
- "commify('1234cat5678', ',', 'cat')" will result in "1,234cat5678", but "commify('1234cat5678')" will result in "12,34c,at5,678".
- The comma
and dot
arguments are provided to ease compliance with locales or languages that do not use comma and dot in numbers the way English does.
-
-
- Tries to connect to the server at sAddress
.
-
-
- Recursively searches dir
for xml files of actors and
- converts them to equivalent lua files. See Docs/Themerdocs/XmlToLua.txt
- for details.
-
-
- Creates a RageBezier2D for you to use. Make sure you destroy the RageBezier2D when you're done with it, or you will have a memory leak.
-
-
- Creates a CubicSplineN for you to use. Make sure you destroy the CubicSplineN when you're done with it, or you will have a memory leak.
-
-
- [02 Colors.lua]
-
-
- [02 Colors.lua]
-
-
- [02 Colors.lua]
-
-
- Returns the current day of the month.
-
-
- Returns the current day of the year.
-
-
- [02 Serialize] Recursively deep-copy a table.
-
-
- [01 base.lua] "Override Lua's dofile to use our loadfile."
-
-
- [03 Gameplay.lua]
-
-
- [03 Gameplay.lua]
-
-
- [02 Utilities.lua] Old name for approach.
-
-
- This function creates files in the theme's Languages folder listing all the strings that have no translation and all the strings that are unused.
- Strings that do not have an entry in the master language are considered unused.
- master_lang_name is the name of the ini file that contains the language with all strings used by the theme.
- Example: find_missing_strings_in_theme_translations("my_best_theme", "en.ini")
-
-
- [02 Utilities.lua] Return the index of a true value in list
.
-
-
- [02 Utilities.lua] Find a key in tab
with the given value
.
-
-
- func
takes a key and a value.
-
-
- Returns the number passed to the function followed by its suffix ("th", "nd", and so on).
-
-
-
- Returns fPercentDancePoints
formatted as a percentage.
-
-
- [03 Gameplay.lua] Returns a list of valid styles for the current gametype.
-
-
- [03 Gameplay.lua]
-
-
- Returns the corresponding CustomDifficulty string for a StepsType/Difficulty (/optional CourseType) combination.
-
-
- [04 Scoring.lua] "Get the radar values directly. The individual steps aren't used much."
-
-
- [02 Other.lua] Returns a string with the Edit Mode SubScreens.
-
-
- [03 EnvUtils2.lua] Returns the value of name
from the Env table.
-
-
- [03 Gameplay.lua] Returns the number at which the Extra color should be used.
-
-
- Returns a corresponding for the given percentage.
-
-
- Returns the current Life Difficulty.
-
-
- Returns the length of the music file found at path.
- If you are loading the sound into an ActorSound, ActorSound:get to get its RageSound then use RageSound's get_length function instead to avoid loading the file twice.
-
-
- Returns a table of the names of the sound drivers available. If the SoundDriver preference is set to something that is not in this list, StepMania WILL NOT START UP. Changes to the SoundDriver preference do not take effect until the next time StepMania starts up.
-
-
- Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown")
-
-
- [02 Utilities.lua] "This returns a profile, preferably a player one. If there isn't one, [it falls] back on the machine profile."
-
-
- [03 ThemePrefs.lua] Returns true
if player pn
is using ProTiming.
-
-
- [02 Utilities.lua] Returns a path to a random song background.
-
-
- [02 Actor.lua]
-
-
- [02 Actor.lua]
-
-
- Returns the display aspect ratio.
-
-
- Returns the name of the currently connected server.
-
-
- [02 Utilities.lua] Returns a path to the current songs background.
-
-
- [03 Gameplay.lua]
-
-
- Returns the theme's aspect ratio.
-
-
- [03 ThemePrefs.lua] (Alias for .)
-
-
- Returns the current Timing difficulty.
-
-
- Returns the current time since the program was started. Includes time that was spent loading songs.
-
-
- [01 alias.lua]
-
-
- [01 alias.lua]
-
-
- [04 Scoring.lua] "Retrieve the amount of taps/holds/rolls involved." Used in some scoring formulas.
-
-
- [03 UserPreferences2.lua] Themer-facing function for getting a user preference.
-
-
- [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a boolean.
-
-
- [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a color.
-
-
- [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a number.
-
-
- [02 Colors.lua] Returns the color's alpha if it has any, otherwise returns 1.
-
-
- [03 Gameplay.lua] Returns the value to start showing the combo at.
-
-
- [03 Gameplay.lua] Returns true
if you need to step on hold heads to activate them.
-
-
- [03 Gameplay.lua] Returns 0 in pump
mode, TimingWindowSecondsHold
preference value in any other game mode.
-
-
- Returns the current hour.
-
-
- [02 Colors.lua] Converts a color from HSV values to something StepMania can understand.
- hue is from 0-360
, saturation and value are 0..1
-
-
- [02 Colors.lua] Converts a color from HSV values with alpha to something StepMania can understand.
- hue is from 0-360
, saturation, value, and alpha are 0..1
-
-
- [02 Colors.lua] "Converts a set of HSV values to a color."
-
-
- [02 Colors.lua] "Takes in a normal color and returns the hex representation. (Adapted from code in LuaBit)"
-
-
- [02 Colors.lua] Changes the hue of the input color.
-
-
- [03 ThemePrefs.lua] Initializes various user preferences.
-
-
- [01 base.lua] "Like ipairs(), but returns only values."
-
-
- [02 Utilities.lua] Returns true
if the coin mode is not set to CoinMode_Home.
-
-
- Returns true
if Event Mode is turned on.
-
-
- [02 Utilities.lua] Returns true
if Arcade and the coin mode is CoinMode_Free.
-
-
- [03 Gameplay.lua] Returns true
if the current game is sGame
.
-
-
- [02 Utilities.lua] Returns true
if the coin mode is set to CoinMode_Home.
-
-
- Returns true
if connected to the Internet.
-
-
- Returns true
if connected to StepMania Online.
-
-
- Returns true
if Player pn
is logged on to a SMOnline server.
-
-
- [04 Scoring.lua] Returns true
if W1 is allowed (and tns == 'TapNoteScore_W2'
)
-
-
- [02 Branches.lua] Returns true
if Routine mode is being played.
-
-
- [04 WidescreenHelpers.lua] Returns true
if the aspect ratio is 16:10 (1.6
) or higher.
-
-
- [01 base.lua] "Like ipairs(), but returns only values."
-
-
- [02 Utilities.lua] Joins a table, splitting each item with delimiter
, returning a string of the results.
-
-
- [02 Colors.lua]
-
-
- [02 Colors.lua]
-
-
- Returns a number linearly interpolated between start and end by percent.
-
-
- Same as lerp, but for colors. All channels will reach the end of the interpolation at the same time.
-
-
- Returns an Actor definition for the actor at sPath
. If sPath
points to a Lua file, any additional arguments will be passed to that script.
-
-
- [02 ActorDef.lua] Loads an actor template. This is the actual core of LoadActor.
-
-
- [02 ActorDef.lua] Loads an actor with params.
-
-
- [01 base.lua] "Override Lua's loadfile to use lua.ReadFile."
-
-
- [02 ActorDef.lua] Load the fallback BGA for the element that is currently being loaded.
-
-
- [02 ActorDef.lua] Loads a font.
-
-
- [02 Sprite.lua] Returns a Sprite with the current song's background.
-
-
- Returns the length of the multi-byte character string sString
.
-
-
- Returns the current Minute.
-
-
- [03 Gameplay.lua] Returns the value to start showing the miss combo at.
-
-
- Creates a module. See the Lua manual for more details.
-
-
- Returns the current month of the year (0
-11
).
-
-
- Returns Month m
as a localized string.
-
-
- Returns Month m
as a string.
-
-
- Similar to approach, but operates on tables of values instead of single values. This will modify the contents of currents
in place, as well as returning currents
.
- currents
, goals
, and speeds
must all be the same size and contain only numbers.
- multiplier
is optional. The speeds in the speeds table will be multiplied by multiplier
. This makes it more convenient to use multiapproach in a per-frame update: pass in the frame delta and the speeds will be scaled to the time that passed.
- Note: When you see the error "approach: speed 1 is negative." it means that a speed value passed was negative. The 1 tells you which entry in the table was invalid.
-
-
- "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.
- next
returns the next index of the table and its associated value."
- See the Lua manual for more details.
-
-
- Converts a string such as 'oni' or 'expert' or 'trick' to the appropriate difficulty.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
-
-
- "Returns three values: the function, the table t
, and nil
,
- so that the construction for k,v in pairs(t) do body end
- will iterate over all key–value pairs of table t
."
-
-
- [02 Colors.lua]
-
-
- [02 Colors.lua]
-
-
- [02 Utilities.lua] Converts a PlayerNumber into a short string (e.g. "P1", "P2").
-
-
- [02 Actor.lua] Returns either p1val
or p2val
depending on pn
.
-
-
- Returns a formatted percent with the specified num
erator and den
ominator.
-
-
- [00 init.lua]
-
-
- [03 ThemePrefs.lua] Prints a table's contents to the log.
-
-
- Returns the product family. (e.g. "StepMania")
-
-
- Returns the product ID. (e.g. "StepMania 5")
-
-
- Returns the product version.
-
-
- "Checks whether v1
is equal to v2
, without invoking any metamethod."
-
-
- "Gets the real value of t[index]
, without invoking any metamethod."
-
-
- "Sets the real value of t[index]
to value
, without invoking any metamethod."
- The modified t
is then returned.
-
-
- [02 ActorDef.lua] Used internally by LoadActor to resolve a path. If optional
is true, then a nil path is returned instead of emitting an error if no file is found.
-
-
- [04 FileUtils.lua] Reads the file at path
and returns its contents.
-
-
- [03 UserPreferences2.lua] (internal) Reads the specified user preference from its config file.
-
-
- Recursively prints all the children of the actor frame to the log file. This can be useful for finding out what actors are on a screen or just seeing what the structure of the actor tree looks like.
- indent
is an optional argument that will be prepended to every line.
-
-
- Recursively prints all values in the table to the log file in the form "(key_type) key: (value_type) value" so that you know the type of the key and the value. Useful if you're not sure exactly what is in a table passed as a parameter.
- indent
is an optional argument that will be prepended to every line.
-
-
- Sends the current style to the server.
-
-
- Loads the specified module. See the Lua manual for more information.
-
-
- [02 Utilities.lua] Round a number.
-
-
- [03 Gameplay.lua] Returns the routine noteskin for player .
-
-
- [03 Gameplay.lua] Returns the routine noteskin for player 2.
-
-
- [02 Colors.lua] Modifies the saturation of the specified color
-
-
- Saves a screenshot. If pn is nil, saves to the machine's Screenshots dir, otherwise saves to the profile's Screenshots dir. Saves as jpg if compress is true, or png if compress is false. The screenshot is signed if sign is true. prefix and suffix are optional strings to add to the beginning and end of the filename.
- Returns success and full path of the resulting screenshot.
-
-
- Scales x
, originally within low1
and high1
, to fall between low2
and high2
.
-
-
- [03 Gameplay.lua] Returns the primary ScoreKeeper class to use.
-
-
- [00 alias.lua, 02 Other.lua] alias for .
-
-
- [00 alias.lua, 02 Other.lua] alias for .
-
-
- Returns the current second.
-
-
- Converts fSecs
to Minutes:Seconds:Milliseconds format using two digits for each section.
-
-
- Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section except Minutes (uses 1).
-
-
- Converts fSecs
to Minutes:Seconds format.
-
-
- Converts fSecs
to Minutes:Seconds.Milliseconds format.
-
-
- Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section.
-
-
- Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3).
-
-
- "If index
is a number, returns all arguments after argument
- number index
. Otherwise, index
must be the string
- "#"
, and [it] returns the total number of extra arguments it received."
-
-
- [02 Branches.lua] Determines the correct music/course selection screen to use and returns it.
-
-
- [03 Gameplay.lua] (soon to be deprecated) Returns a list of codes to use on ScreenSelectProfile.
-
-
- [02 Serialize.lua] Serialize the table t
.
-
-
- [03 EnvUtils2.lua] Sets the value of name
to value
in the Env table.
-
-
- [03 UserPreferences2.lua] Themer-facing function for setting a user preference.
-
-
- [03 Gameplay.lua]
-
-
- [02 ActorDef.lua] Returns true
if a decoration should be shown on the current screen or not.
-
-
- [03 CustomSpeedMods.lua] Returns a Lua option row with the custom speed mods defined in SpeedMods.txt.
-
-
- [02 Utilities.lua] Splits a string at every occurence of delimiter
, returning a table of the results.
-
-
- [02 Colors.lua]
-
-
- [02 Colors.lua]
-
-
- [02 ActorDef.lua]
-
-
- [02 ActorDef.lua]
-
-
- [02 ActorDef.lua]
-
-
- [02 Utilities.lua] Returns a shuffled version of t
.
-
-
- [02 Utilities.lua] Returns a slice of the specified table of size num
.
-
-
- [02 Utilities.lua] Look up each value in a table, returning a table with the resulting strings.
-
-
- [02 TextBanner.lua] This function defines how the TextBanner is laid out.
-
-
- [02 Utilities.lua] Converts a string or number to a bool.
-
-
- Tries to convert e
to a number. Returns nil
if
- it can't convert the input to a number. (base
is optional.)
-
-
- Converts e
to a string.
-
-
- [02 Enum.lua] Returns a string representing an enum starting from '_'. For example, passing PlayerNumber_P1 to this function will return P1
.
-
-
- [00 init.lua] Alias for .
-
-
- Returns the type of the object as a string. See the Lua manual for valid return values.
-
-
- "Returns the elements from the given table.
- This function is equivalent to return list[i], list[i+1], ···, list[j]
"
- (i
and j
are optional; "by default, i is 1 and j is the length of the list.")
-
-
- Returns a string with characters escaped for URLs. (e.g. a space becomes '%20')
-
-
- This tells Stepmania to update the screen position for any changes to these preferences: CenterImageAddWidth, CenterImageAddHeight, CenterImageTranslateX, CenterImageTranslateY.
- This way, a theme can implement a custom interactive screen for adjusting those preferences.
-
-
- [01 base.lua] Alias for lua.GetThreadVariable.
-
-
- Returns the current version's build date.
-
-
- Returns the current version's build time.
-
-
- [00 init.lua] Alias for .
-
-
- [04 WidescreenHelpers.lua] Depending on the screen width, scales between ar43
(4:3; 640px) and ar169
(16:9; 854px).
-
-
- [02 Utilities.lua]
-
-
- [02 ActorDef.lua] Wraps the children in an ActorFrame.
-
-
- [04 FileUtils.lua] Writes buf
to the file at path
.
-
-
- [03 GamePreferences.lua]
-
-
- [03 UserPreferences2.lua] (internal) Writes user preference prefName
to its config file with value
being tostring
'd.
-
-
- Returns the current year.
-
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for toggling AutoSetStyle.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for displaying the score on ScreenGameplay.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for displaying the StepsDisplay on ScreenGameplay.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for determining the fail length.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for determining the receptor arrow position.
-
-
- [03 ThemePrefs.lua] Returns a Lua option row determining how deep the player options menu should go.
-
-
-
-
-
-
-
- Returns the for the file at sPath
.
-
-
- Returns true
if sClassName
is a registered Class.
-
-
- Loads all commands and sets X and Y for the specified Actor.
-
-
- Used internally by LoadActor to resolve a path. If optional
is true, then a nil path is returned instead of emitting an error if no file is found.
-
-
-
-
- Updates ArrowEffects, which sets current values for Tornado, Invert, and Beat.
-
-
- Returns the Y Offset of a note in column iCol
at beat fNoteBeat
for the provided PlayerState. Y Offset is affected by Speed mods and Accel mods, and impacts most other arrow effects.
-
-
- Returns the Y position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
- fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
-
-
- Returns the Y offset of a note in column iCol
with a Y position of fYPos
for the provided PlayerState.
- fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
-
-
- Returns the X position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
-
-
- Returns the Z position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
-
-
- Returns the X rotation of a note with a Y offset of fYOffset
for the provided PlayerState.
-
-
- Returns the Y rotation of a note with a Y offset of fYOffset
for the provided PlayerState.
-
-
- Returns the Z rotation of a note at beat fNoteBeat
for the provided PlayerState.
- bIsHoldHead
is an optional argument which defaults to false. If true, this function will return 0
if the [ArrowEffects] metric DizzyHoldHeads
is false.
-
-
- Returns the Z rotation of the receptors for the provided PlayerState.
-
-
- Returns the Alpha of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
- fPercentFadeToFail
is optional and defaults to -1.
- fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
- fDrawDistanceBeforeTargetsPixels
is optional and will pull defaults from the [Player]
metric DrawDistanceBeforeTargetsPixels
- fFadeInPercentOfDrawFar
is optional and will pull defaults from the [NoteField]
metric FadeBeforeTargetsPercent
-
-
- Returns the Glow of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState. The arguments are the same as for GetAlpha.
-
-
- Returns the brightness of a note at beat fNoteBeat
for the provided PlayerState.
-
-
- Returns true if any arrow effects for the provided PlayerState require the z buffer.
-
-
- Returns the zoom of a note for the provided PlayerState.
-
-
- Returns the FrameWidthScale of a hold part with a Y offset of fYOffset
for the provided PlayerState. fOverlappedTime
is optional and will default to 0.
-
-
-
-
- Enumerated types are lookup tables associating a string to each numerical
- value for each Enum. For example,
- [1]
would be the
- string 'PlayerNumber_P1'
.
- The functions defined in the Enum
namespace are valid member
- functions of every Enum where the first argument is
- omitted and the name of the Enum is used in place
- of Enum
. Instead of
- Enum.GetName(
- )
or
- Enum.Reverse(
- )
, one can use
- : GetName()
or
- : Reverse()
, respectively.
-
-
- Both x
and y
need to be elements of the enumerated
- type e
. Returns a value less than/greater than/equal to
- 0
corresponding to the numerical value of x
being
- less than/greater than/equal to the numerical value of y
as
- determined by
- Enum.Reverse( e )
.
-
-
- Returns the type of e
. For example,
- Enum.GetName( )
- will return the string 'PlayerNumber'
.
-
-
- Returns a reverse lookup table for the enumerated type e
. For
- example: local r =
- Enum.Reverse( );
- local n = r['PlayerNumber_P2'];
- The value of n
in this case would be 1
corresponding
- to the 0-based indexing using in C++ and not 2
as might be
- expected for the 1-based indexing used in Lua.
-
-
-
-
- Returns true
if the type of v
is sType
.
-
-
- Flushes log files to disk.
-
-
-
- Tries to read the file at sPath
. If successful, it returns the file's contents.
- If unsuccessful, it returns two values: nil
and "error"
.
-
-
- Reports the error through the error reporting system. error_type is the type used for the dialog that is presented, a dialog will not appear for a type the user has chosen to ignore.
- error is optional an defaults to "Script error occurred.". error_type is optional and defaults to "LUA_ERROR".
-
-
- Calls func(...)
with two LuaThreadVariables set, and returns the return values of func()
.
-
-
- Writes sString
to log.txt. Aliased by
- .
-
-
- Writes sString
to info.txt and log.txt as
- a warning. Aliased by .
-
-
-
-
- Returns a random number. Without arguments, the number is in the range 0..1
. With a single argument (n
), the number is in the range of 1..n
. With two arguments (lower
, upper
), the number is in the range of l..u
.
-
-
- Sets the seed of the random number generator to seed
.
-
-
-
-
- Creates a RageFile handle with which one can use the commands in .
-
-
-
-
- Gets the credits message for Player pn
.
-
-
-
-
- Returns a table with the playable Steps for the present Song based on the present Game.
-
-
- Returns true if the song's steps (st
) are playable.
-
-
- Returns true if the song's StepsType (st
) are playable.
-
-
-
-
- Returns the number of songs in a Trail.
-
-
- Returns the Trail's total length in seconds.
-
-
-
-
-
-
-
-
- This adds a wrapper state around the Actor, which is like wrapping the Actor in an ActorFrame, except that you can use it on any actor, and add or remove wrapper states in response to things that happen while the screen is being used. (wrapping an Actor in an ActorFrame normally requires setting it up before the screen starts)
- The ActorFrame that is returned is the wrapper state, for convenience.
- An Actor can have any number of wrapper states. Use GetWrapperState to access wrapper states for the actor.
-
-
- Returns the number of wrapper states the actor has.
-
-
- Returns the wrapper state at index i. Think of wrapper states with a higher index as being "further out". Actor is inside Wrapper 1, Wrapper 1 is inside Wrapper 2, Wrapper 2 is inside Wrapper 3, and so on.
-
-
- Removes the wrapper state at index i.
-
-
- Returns the Actor's parent, or nil
if it doesn't have one.
-
-
- Returns the Actor's fake parent, or nil
if it doesn't have one.
-
-
- Sets the Actor's fake parent to p, or clears it if p is nil.
-
-
- Returns the Actor's visibility.
-
-
- Returns the Actor's x position.
-
-
- Returns the Actor's y position.
-
-
- Returns the Actor's z position.
-
-
- Returns what the Actor's x position will be when it reaches its destination tween state.
-
-
- Returns what the Actor's y position will be when it reaches its destination tween state.
-
-
- Returns what the Actor's z position will be when it reaches its destination tween state.
-
-
- Returns the Actor's zoom.
-
-
- Returns the Actor's X zoom.
-
-
- Returns the Actor's Y zoom.
-
-
- Returns the Actor's Z zoom.
-
-
- Sets Texture Filtering for an Actor to b
.
-
-
- Plays the commands that follow at an accelerated rate (fRate
* fRate
), where fRate
is in seconds.
-
-
- Adds a command to the Actor.
-
-
- Adds rot
to the Actor's current x rotation.
-
-
- Adds rot
to the Actor's current y rotation.
-
-
- Adds rot
to the Actor's current z rotation.
-
-
- Adds xPos
to the Actor's current x position.
-
-
- Adds yPos
to the Actor's current y position.
-
-
- Adds zPos
to the Actor's current z position.
-
-
- [02 Actor.lua] Sets the alignment of an Actor, where h
and v
are in the range 0..1.
-
-
- Sets whether or not the Actor should animate.
-
-
- Sets the Actor's aux value. (This can be a solution for coupling data with an Actor.)
-
-
- If true
, cull the Actor's back faces. See also: .
-
-
- Sets the Actor's base alpha to fAlpha
, where fAlpha
is in the range 0..1.
-
-
- Sets the Actor's base X rotation to rot
.
-
-
- Sets the Actor's base Y rotation to rot
.
-
-
- Sets the Actor's base Z rotation to rot
.
-
-
- Sets the Actor's base zoom to zoom
.
-
-
- Sets the Actor's base X zoom to zoom
.
-
-
- Sets the Actor's base Y zoom to zoom
.
-
-
- Sets the Actor's base Z zoom to zoom
.
-
-
- Sets the Actor to use the specified blend mode.
-
-
- Makes the Actor bob up and down. Can use to define different bobbing behavior.
-
-
- Makes the Actor bounce, similar to bob but with one point acting as the ground. Can use to define different bouncing behavior (with effectmagnitude values relating to x, y, and z movement).
-
-
- [02 Actor.lua]
-
-
- [02 Actor.lua]
-
-
- [02 Actor.lua] Centers an Actor on the screen. (equivalent to x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y
)
-
-
- [02 Actor.lua] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X
)
-
-
- [02 Actor.lua] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y
)
-
-
- Determines if the z-buffer should be cleared or not.
-
-
- [02 Actor.lua] Combines multiple interpolators for complex tweens. tweens
- can either be a string like "linear,0.25,accelerate,0.75"
or
- a table with tween information { {Type="linear", Percent=0.25, Bezier=nil}, {Type="accelerate", Percent=0.75, Bezier=nil} }
-
-
- Crops percent
of the Actor from the bottom, where percent
is in the range 0..1.
-
-
- Crops percent
of the Actor from the left, where percent
is in the range 0..1.
-
-
- Crops percent
of the Actor from the right, where percent
is in the range 0..1.
-
-
- Crops percent
of the Actor from the top, where percent
is in the range 0..1.
-
-
- Sets the Actor's cull mode to mode
.
-
-
- Plays the commands that follow at an decelerated rate (1 - (1-fRate
) * (1-fRate
)), where fRate
is in seconds.
-
-
- Set the Actor's diffuse color to c
.
-
-
- Sets the Actor's alpha level to fAlpha
, where fAlpha
is in the range 0..1.
-
-
- Makes the Actor switch between two colors immediately. See Themerdocs/effect_colors.txt for an example.
-
-
- Sets the Actor's bottom edge color to c
.
-
-
- Set the Actor's diffuse color to c
, ignoring any alpha value in c
.
-
-
- Sets the Actor's left edge color to c
.
-
-
- Sets the Actor's lower left corner color to c
.
-
-
- Sets the Actor's lower right corner color to c
.
-
-
- Makes the Actor switch between two colors, jumping back to the first after reaching the second. See Themerdocs/effect_colors.txt for an example.
-
-
- Sets the Actor's right edge color to c
.
-
-
- Makes the Actor shift between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
-
-
- Sets the Actor's top edge color to c
.
-
-
- Sets the Actor's upper left corner color to c
.
-
-
- Sets the Actor's upper right corner color to c
.
-
-
- Tells the Actor to draw itself.
-
-
- Sets the Actor's draworder to iOrder
, where larger values display first.
-
-
- [02 Actor.lua] (Added in sm-ssc)
-
-
- [02 Actor.lua]
-
-
- Set the Actor's effect clock to s
.
-
-
- Sets the first effect color to c
.
-
-
- Sets the second effect color to c
.
-
-
- Set the Actor's effect magnitude in each direction to the given values.
-
-
- Set the Actor's effect offset to fTime
. The offset is added to the time into the effect before calculating percent_through_effect.
-
-
- Set the Actor's effect period to fTime
.
-
-
- Set the Actor's effect timing.
- hold_at_zero is before hold_at_full in the argument list for compatibility. A future version will probably swap them because it makes more sense to have hold_at_full come before hold_at_zero.
- All effect timings must be greater than or equal to zero, at least one of them must be greater than zero.
- The effect timing controls how long it takes an effect to cycle and how long it spends in each phase.
- Depending on the effect clock, the actor's time into effect is updated every frame. That time is then translated into a percent_through_effect using the parameters to this function.
-
- ramp_to_half is the amount of time for percent_through_effect to reach 0.5.
- hold_at_half is the amount of time percent_through_effect will stay at 0.5.
- ramp_to_full is the amount of time percent_through_effect will take to go from 0.5 to 1.0.
- hold_at_full is the amount of time percent_through_effect will stay at 1.0.
- After reaching the end of hold_at_full, percent_through_effect stays at 0 until hold_at_zero is over.
-
- The different effects use percent_through_effect in different ways. Some use it to calculate percent_between_colors with this sine wave: sin((percent_through_effect + 0.25f) * 2 * PI ) / 2 + 0.5f
- Some effects check the internal bool blink_on. blink_on is true if percent_through_effect is greater than 0.5 and false if percent_through_effect is less than or equal to 0.5.
- Check the effect functions for individual explanations: diffuseblink, diffuseshift, glowblink, glowshift, glowramp, rainbow, wag, bounce, bob, pulse, spin, vibrate.
-
-
- Set the hold_at_full part of the effect timing while leaving the others unchanged.
-
-
- Fades percent
of the Actor from the bottom where percent
is in the range 0..1.
-
-
- Fades percent
of the Actor from the left where percent
is in the range 0..1.
-
-
- Fades percent
of the Actor from the right where percent
is in the range 0..1.
-
-
- Fades percent
of the Actor from the top where percent
is in the range 0..1.
-
-
- Finishes up an Actor's tween immediately.
-
-
- [02 Actor.lua] Stretches an Actor to fill the entire screen.
-
-
- Returns the Actor's aux value.
-
-
- Returns the Actor's base X zoom value.
-
-
- Returns the Actor's base Y zoom value.
-
-
- Returns the Actor's base Z zoom value.
-
-
- Returns true
if the Actor has a command named sCmdName
.
-
-
- Returns the Actor's current diffuse color.
-
-
- Returns the Actor's current diffusealpha.
-
-
- Returns the Actor's current effect delta.
-
-
- Returns the Actor's current effect magnitude as three floats (not one; I hate Lua.xsd).
-
-
- Returns the Actor's current glow color.
-
-
- Returns the Actor's horizontal alignment as a number in the range 0..1.
-
-
- Returns the Actor's name.
-
-
- Returns the number of states the Actor has.
-
-
- Returns the Actor's current height.
-
-
-
- Returns the Actor's current X rotation.
-
-
- Returns the Actor's current Y rotation.
-
-
- Returns the Actor's current Z rotation.
-
-
- Returns the number of seconds into the currently running effect (e.g. diffuseshift, bob).
-
-
- Returns how much time is remaining for the current tween.
-
-
- Returns the Actor's vertical alignment as a number in the range 0..1.
-
-
- Returns the Actor's current width.
-
-
- Returns the zoomed height of an Actor.
-
-
- Returns the zoomed width of an Actor.
-
-
- Returns true if this actor is currently set to use the effect delta for tweening.
-
-
- Sets the Actor's glow color.
-
-
- Makes the Actor glow between two colors immediately. See Themerdocs/effect_colors.txt for an example.
-
-
- Makes the Actor glow between two colors smoothly, jumping back to the first at the end. See Themerdocs/effect_colors.txt for an example.
-
-
- Makes the Actor glow between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
-
-
- Set the fractional horizontal alignment of the Actor according to fAlign
which should be a float in the range 0..1. An alignment of 0 is left aligned while an alignment of 1 is right aligned. See for the common case.
-
-
- Sets the heading of this Actor to fHeading
.
-
-
- Hides the Actor for the specified amount of time.
-
-
- [Deprecated] Compatibility alias for the hidden command, which was removed in sm-ssc. Use instead.
-
-
- [02 Actor.lua] "Hide if b
is true
, but don't unhide if b
is false
."
-
-
- Set the horizontal alignment of the Actor according to align
. See for fractional alignment.
-
-
- Hurries up an Actor's tweening by factor
.
-
-
- Plays the commands that follow at a normal rate, where fRate
is in seconds.
-
-
- [02 Lyrics.lua] Plays the lyric command for the specified side
("Back"
or "Front"
).
-
-
- Sets the Actor's name to sName
.
-
-
- Stops the Actor's movement. (Usually used for Sprites or Models.)
-
-
- Sets the pitch of this Actor to fPitch
.
-
-
- Starts the Actor's movement. (Usually used for Sprites or Models.)
-
-
- Plays a command named sCommandName
. params
is passed to the command as an argument if it is a table.
-
-
- [02 Actor.lua] Sets the visibility of the Actor based on p
being a human player.
-
-
- Makes the Actor grow and shrink. Can use to define different pulsing behavior.
-
-
- Queues a command named sCommandName
to be played.
-
-
- Basically creates a command named !sMessageName
(Note the ! at the beginning. The source code says this: "Hack: use "!" as a marker to broadcast a command, instead of playing a command, so we don't have to add yet another element to every tween state for this rarely-used command.")
-
-
- Makes the Actor change colors continually using colors of the rainbow. Each channel follows a cosine wave, red starts at 0, green starts at 2pi/3, and blue starts at 4pi/3.
-
-
- Sets the roll of this Actor to fRoll
.
-
-
- Set the Actor's rotation on the X axis to fAlign
.
-
-
- Set the Actor's rotation on the Y axis to fAlign
.
-
-
- Set the Actor's rotation on the Z axis to fAlign
.
-
-
-
- [02 Actor.lua] An alternative version of .
-
-
- [02 Actor.lua]
-
-
- Scales the Actor to cover a rectangle defined by the four float arguments.
-
-
- Scales the Actor to fit inside a rectangle defined by the four float arguments.
-
-
- Sets the height of the Actor.
-
-
- Sets the size of the Actor.
-
-
- [01 alias.lua] Alias for setsize.
-
-
- Sets a multi-framed Actor's state to iNewState
.
-
-
- Sets the width of the Actor.
-
-
- Use this to make the actor use the effect clock to tween instead of using the global frame delta.
-
-
- Sets the shadow's color to c
.
-
-
- Sets the Actor's shadow length to fLength
.
-
-
- Sets the Actor's horizontal shadow length to fLength
.
-
-
- Sets the Actor's vertical shadow length to fLength
.
-
-
- Skews the Actor on the x axis by fAmount
.
-
-
- Skews the Actor on the y axis by fAmount
.
-
-
- Waits fSeconds
before executing the next command.
-
-
- [02 Actor.lua]
-
-
- Tells the Actor to spin. Can use to define different spinning behavior.
-
-
-
- Stops any effect the Actor has.
-
-
- Stops any tweening.
-
-
- Stretches the Actor to a rectangle of a specific size.
-
-
- Translates the texture of the actor by x and y.
-
-
- Determines if the Actor should use texture wrapping or not.
-
-
- Uses type to determine the tween to use. The type must be one of the TweenType enum values. If the type is note TweenType_Bezier, the params table is ignored. If the type is TweenType_Bezier, then the params table must have 4 or 8 numbers. 4 numbers in the params creates a 1 dimensional bezier curve, 8 numbers creates a 2 dimensional bezier curve.
- It's usually more convenient to use Actor:linear, Actor:accelerate, and so on, rather than using Actor:tween directly.
-
-
- Set the fractional vertical alignment of the Actor according to fAlign
which should be a float in the range 0..1. An alignment of 0 is top aligned while an alignment of 1 is bottom aligned. See for the common case.
-
-
- Set the vertical alignment of the Actor according to align
. See for fractional alignment.
-
-
- Makes the Actor vibrate violently. Can use to define different vibration behavior.
-
-
- Sets an Actor's visibility to b.
-
-
- Makes the Actor wag. Use to define different wag behavior.
-
-
- Set the x position of the Actor to xPos
.
-
-
- Set the y position of the Actor to yPos
.
-
-
- Set the z position of the Actor to zPos
.
-
-
- Sets the z bias to fBias
.
-
-
- Enables/disables z-buffer depending on bUse
.
-
-
- Zooms the Actor to zoom
scale.
-
-
- Zooms the Actor on both the X and Y axis using zoomX
and zoomY
.
-
-
- Zooms the Actor to zoom
height. See also: .
-
-
- Zooms the Actor to zoom
width. See also: .
-
-
- Zooms the Actor to zoom
scale on the X axis.
-
-
- Zooms the Actor to zoom
scale on the Y axis.
-
-
- Zooms the Actor to zoom
scale on the Z axis.
-
-
- Sets the z testing mode to write on pass if true
, turns it off if false
-
-
- Sets the z testing mode to testMode
.
-
-
- Sets z writing to true
or false
based on bWrite
.
-
-
-
- [02 Actor.lua] Plays the commands that follow using a bezier curve to determine the rate. The curve must have 4 or 8 elements. This is a convenience wrapper around calling Actor:tween with TweenType_Bezier.
-
-
- [02 Actor.lua] Stretches an Actor to cover the screen. (equivalent to stretchto,0,0,SCREEN_WIDTH,SCREEN_HEIGHT
)
-
-
- [02 Actor.lua] A customized version of pulse that is more appealing for on-beat effects.
-
-
- [02 Actor.lua] Sets and Actor as a mask destination.
-
-
- [02 Actor.lua] Sets an Actor as a mask source. (Also clears zbuffer; other mask sources need to not clear the zbuffer)
-
-
- [02 Actor.lua] Make graphics their true size at any resolution.
-
-
- [02 Actor.lua] Scale things back up after they have already been scaled down.
-
-
- [02 Actor.lua] A customized version of pulse that is more appealing for on-beat effects.
-
-
- Sets the x and y location of the Actor in one command.
-
-
-
-
- Adds a child to the ActorFrame from the specified path.
-
-
- Sets the field of view for the ActorFrame.
-
-
- Returns the child with a name of sName
.
- If there are multiple children with that name, returns an array of those children.
- The table also acts as a pass through layer, function calls pass through to the last child of that name.
-
-
- Returns a table of all the children in the ActorFrame.
- The table is indexed by the names of the children.
- If there are multiple children with the same name, the entry for that name is an array of those children.
- The table also acts as a pass through layer, function calls pass through to the last child of that name.
-
-
- Gets the ActorFrame's Draw function.
-
-
- Returns the number of children in the ActorFrame.
-
-
- Gets the update function's rate.
-
-
- Plays the sCommandName
command on the ActorFrame's children.
-
-
- Plays the sCommandName
command on the ActorFrame's leaves.
-
-
- Sets if the Actorframe should propagate commands to its children.
-
-
- [02 Actor.lua] Propagates a command to the ActorFrame's children.
-
-
- Removes all the children from the ActorFrame.
-
-
- Removes the specified child from the ActorFrame.
-
-
- Runs the commands in cmds
on the ActorFrame's children.
-
-
- Runs the commands in cmds
on the ActorFrame's leaves.
-
-
- Sets the ActorFrame's ambient light color to c
.
-
-
- Sets the ActorFrame's diffuse light color to c
.
-
-
- Sets if the ActorFrame should draw by Z position.
-
-
- Sets the ActorFrame's Draw function to the specified Lua function.
-
-
- Sets the field of view for the ActorFrame.
-
-
- Currently unimplemented since it does not handle errors correctly. Arguments must be passed in as a table.
-
-
- Sets the ActorFrame's specular light color to c
.
-
-
- Sets the ActorFrame's update function to the specified Lua function.
-
-
- Sets the update function's rate to fRate
.
-
-
- Tells the ActorFrame to sort by draw order.
-
-
- Sets the vanishing point for the ActorFrame.
-
-
-
-
- Creates the ActorFrameTexture.
-
-
- Enables/disables the Alpha Buffer.
-
-
- Enables/disables the Depth Buffer.
-
-
- Enables/disables
-
-
- Enables/disables the Preserve Texture option.
-
-
- Returns the texture.
-
-
- Sets the Texture's name to sName
.
-
-
-
-
- Adds a texture to the ActorMultiTexture. Returns the number of texture units.
-
-
- Clears all the textures from the ActorMultiTexture.
-
-
- Sets the EffectMode on the ActorMultiTexture.
-
-
- Sets the size of the ActorMultiTexture from the specified texture.
-
-
- Sets the coordinates of the ActorMultiTexture.
-
-
- Sets a TextureMode on the specified index.
-
-
-
-
- The list of quad states is used to determine which animation state is used for each quad. The offset is added to the AMV's current state, and the resulting state is used.
-
-
- Adds an animation state to the ActorMultiVertex. The state_data table must be like this:
- {{left, top, right, bottom}, delay}
- left, top, right, and bottom are pixel coordinates, starting at 0. If delay is 0 or negative, the state will last forever.
-
-
- Forces the AMV to update the texture coordinates on all its quads, even if the current state has not changed.
-
-
- Returns whether the AMV uses the animation state.
-
-
- Sets whether the AMV uses the animation state.
- This works best when using DrawMode_Quads.
- AMV's can have animated textures like sprites. Each state tells the AMV what part of the texture to use, and how long the state lasts.
- Use AddState to add a state onto the end, or SetStateProperties to set all the states at once, or SetState to set a single state.
- Each quad has its own offset that is added to the current state. Use AddQuadState to add to the list of quad states, or SetQuadState to set an existing quad state.
-
-
- Returns the number of states the AMV has.
-
-
- Returns the number of quad states in the destination tween state for the AMV.
-
-
- Returns the id of the current state.
-
-
- Gets whether the AMV should call the decode function for its texture during updates.
-
-
- Sets whether the AMV should call the decode function for its texture during updates.
-
-
- Sets the current state.
-
-
- Returns the offset of the requested quad state.
-
-
- Sets the offset of the requested quad state.
-
-
- Returns a table containing the data for the requested state.
-
-
- Sets the requested state to the data in state_data. Similar to AddState, but SetStateData only works on states that have already been added.
-
-
- Each element of the table must be a state_data table, and is used to construct one state. The table as a whole is the entire list of all states for the AMV.
-
-
- Removes the requested state from the state list.
-
-
- Removes the requested quad state from the quad state list.
-
-
- Sets the delay for every state to delay.
-
-
- Sets how far into its animation the AMV is.
-
-
- Sets vertex number index
with the properties provided. The tables of properties are each optional and can be provided in any order.
-
-
- Sets multiple vertices at once. The elements of vertices
should themselves be tables, of the form provided to SetVertex. If vertices
is the first argument it will start from vertex 1. If an integer is provided before vertices
it will start from that vertex. It will add vertices as necessary.
- Example: self:SetVertices( { { { x1, y1, z1 } , { r1,g1,b1,a1 } , { tcx1,tcy1 } }; { { x2, y2, z2 } , { r2,g2,b2,a2 } , { tcx2,tcy2 } } } )
-
-
- Sets all the drawn verts of the ActorMultiVertex by evaluating the splines.
- ("all the drawn verts" means all the verts between FirstToDraw and NumToDraw, the verts that are set to draw in the current tween state.)
- The parts of the ActorMultiVertex are evenly spaced along the spline in terms of t value.
- The exact behavior depends on the draw mode.
- DrawMode_Quads uses all 4 splines, one for each corner.
- DrawMode_QuadStrip and DrawMode_Strip use 2 splines, one for each edge of the strip.
- DrawMode_Fan uses one spline, for the edge verts of the fan. The first vert is not touched because it is the center.
- DrawMode_Triangles uses 3 splines, one for each corner.
- DrawMode_SymmetricQuadStrip uses 3 splines, one on each edge and one in the center.
- DrawMode_LineStrip uses 1 spline.
-
-
- Returns the requested spline. Spline indices range from 1 to 4.
- ActorMultiVertex splines are not inside the tween state, and will not change the verts until you call SetVertsFromSplines.
-
-
- Sets the number of vertices.
-
-
- Returns the number of vertices
-
-
- Sets the draw state variables to the values in the table.
- Mode must be a DrawMode.
- First is the index of the first vertex to draw.
- Num is the number of vertices to draw. -1 for Num means draw all verts after First.
- Any value not in the table defaults to the already set value.
- Examples:
- -- Sets all three parts of the draw state.
- self:SetDrawState{Mode="DrawMode_Quads", First= 1, Num= -1}
- -- Set only the draw mode. First and Num remain unchanged from previous.
- self:SetDrawState{Mode="DrawMode_Quads"}
- -- Set the first and number to draw. Draw mode remains unchanged.
- self:SetDrawState{First= 3, Num= 4}
-
-
- Get the DrawMode of the destination tween state.
-
-
- Get the FirstToDraw of the destination tween state.
-
-
- Get the NumToDraw of the destination tween state.
-
-
- Get the DrawMode of the current tween state.
-
-
- Get the FirstToDraw of the current tween state.
-
-
- Get the NumToDraw of the current tween state.
-
-
- Returns the ActorMultiVertex's texture.
-
-
- Sets the EffectMode of the ActorMultiVertex.
-
-
- Sets the TextureMode of the ActorMultiVertex.
-
-
- Sets the width of the line for DrawMode_LineStrip.
-
-
- Sets the texture to texture
-
-
- Sets the texture at from the file path path
.
-
-
-
-
- Returns the target of the ActorProxy.
-
-
- Sets the ActorProxy target to a
.
-
-
-
-
- Returns the scroller's current item.
-
-
- Returns the item the scroller's going to.
-
-
- Returns how long it will take for the scroller to completely scroll through all its items.
-
-
- Returns the number of items in the ActorScroller.
-
-
- Returns the number of seconds the scroller pauses between items.
-
-
- Returns the number of seconds until the scroller reaches its destination.
-
-
- Compatibility alias for .
-
-
- Positions the scroller items.
-
-
- Scrolls through all the items in the scroller.
-
-
- Compatibility alias for .
-
-
- Scrolls through all the items in the scroller with padding at the beginning and end.
-
-
- Compatibility alias for .
-
-
- Sets the item the scroller should scroll to next and makes it the current item.
-
-
- Sets the item the scroller should scroll to next.
-
-
- Sets if the scroller should catch up fast.
-
-
- Compatibility alias for .
-
-
- Specifies if the scroller should loop or not.
-
-
- Sets the scroller's mask to a Quad that is fWidth
by fHeight
pixels.
-
-
- Sets the scroller to draw fNumItems
items.
-
-
- Sets the number of subdivisions in the scroller.
-
-
- Compatibility alias for .
-
-
- Sets the scroller's pause countdown to fSecs
.
-
-
- Sets the scroller's pause between items to fSeconds
.
-
-
- Sets how many seconds the scroller should spend on each item.
- A value of 0
means the scroller will not scroll.
-
-
- Compatibility alias for .
-
-
- Sets the scroller's transform function to the specified Lua function.
-
-
- Sets the scroller's transform function from fItemHeight
.
-
-
- Sets the scroller's transform function from fItemWidth
.
-
-
-
-
- This Actor represents a playable sound. There are two attributes that can be set on load.
- * SupportPan
- Let the sound pan from side to side.
- * SupportRateChanging
- Let the sound change rate and pitch.
- * IsAction
- If true, the sound is an action sound, and will be muted if the MuteActions preference is turned on.
-
-
- Returns the that can be played by this Actor.
-
-
- Returns whether the sound is an action.
-
-
- Loads the sound at sPath
.
-
-
- Pauses or unpauses the sound based on bPause
.
-
-
- Plays the sound.
-
-
- [02 Sound.lua] Plays the sound on the given player's side. You must set SupportPan = true
on load.
-
-
- Sets whether the sound is an action.
-
-
- Stops the sound.
-
-
-
-
- Returns true if Announcer sAnnouncer
exists.
-
-
- Returns a table of installed announcers.
-
-
- Returns the current announcer's name.
-
-
- Sets the announcer to sNewAnnouncer
.
-
-
-
-
- Returns true
if the application presently has focus.
-
-
- Returns the name of the architecture in use.
-
-
-
-
- Returns true
if the Banner is currently scrolling.
-
-
-
-
-
- Loads the background from an UnlockEntry.
-
-
- Loads the banner from an UnlockEntry.
-
-
- Loads the card image from the specified Character.
-
-
- Loads the banner from the cache based on sPath
(typically or ).
-
-
- Loads a Banner from a specified Course.
-
-
- Loads a Banner from a specified Song.
-
-
- Loads a Banner from a specified Song Group.
-
-
- Loads a Banner from a specified SortOrder.
-
-
- Loads an icon from the specified Character.
-
-
- See .
-
-
- See .
-
-
-
-
-
-
-
- Add the attribute attr
to the string at position
- iPos
.
- The attribute is a table that must contain Length
- which specifies how many (multi-byte) characters the attribute
- is to apply. If Length=-1
, then the attribute applies
- until another attribute overrides it.
- If the table contains Diffuse
, then the color value
- is applied to the range of text.
- If the table contains Diffuses
, then it should be
- an array of 4 colors which specify the diffuse color for the
- top left, top right, bottom left, and bottom right.
- If the table contains Glow
, then the color value
- is applied as a glow to the range of text.
- Example:
- attr = { Length = 10; Diffuse = color("#AABBCC"); }
-
-
- Clear all attributes associated with the BitmapText.
-
-
- [02 Actor.lua] Sets the diffuse and stroke color of text in one command.
-
-
- Returns the text that is currently set.
-
-
- Causes each character of text to be randomly distorted by
- distortion_percentage of its size when the text is set. The distortion
- only changes when the text changes.
-
-
- Turns off distortion.
-
-
- Returns whether the diffuse colors in the attributes are multiplied by the general diffuse colors of the BitmapText.
-
-
- If mult_attrs_with_diffuse is set to true, then the diffuse colors in the attributes are multiplied by the general diffuse colors of the BitmapText.
-
-
- If bJitter
is true
, move each character of the string around by a small random amount.
-
-
- If use_zoom is true, this BitmapText will use the zoom that has been applied to it when calculating to change its base zoom from maxheight or maxwidth.
-
-
- Set the maximum height of the unzoomed text to fHeight
. If fHeight
is 0
, then there is no maximum height.
-
-
- Set the maximum width of the unzoomed text to fWidth
. If fWidth
is 0
, then there is no maximum width.
-
-
- [02 Actor.lua] Remove any stroke color.
-
-
- [02 Actor.lua] Alias for setting to false
.
-
-
- If true
, set each character of the text in turn to the rainbow colors in the metrics BitmapText::RainbowColor#
.
-
-
- Set the text to sText
. This clears all attributes.
-
-
- [02 Actor.lua] Sets text using string.format(sFormat, ...)
.
-
-
- [02 Actor.lua] Alias for .
-
-
- Sets the stroke color to c
.
-
-
- If the text is glowing, specify if just the stroke layer, just the inner layer, or both are affected by the glow.
-
-
- If true
, make all text uppercase.
-
-
- Add iSpacing
pixels of padding between lines of text.
-
-
- Wrap the unzoomed text at iWidth
pixels. If you or by x
and you want the text wrapped at width
, then you should use wrapwidthpixels(width/x)
.
-
-
-
-
- Returns the text that is currently set at the exact moment you call it. This is likely only going to be useful in an Update command.
-
-
- Sets the BPMDisplay from the specified Course.
-
-
- Sets the BPMDisplay from the GameState.
-
-
- Sets the BPMDisplay from the specified Song.
-
-
- Sets the BPMDisplay from the specified Steps.
-
-
-
-
- Returns the path to the character's card graphic.
-
-
- Returns this character's directory.
-
-
- Returns this character's ID.
-
-
- Returns the path of the dancing animation of this character.
-
-
- Returns the character's display name.
-
-
- Returns the path to the character's icon.
-
-
- Returns the path of the model of this character.
-
-
- Returns the path of the rest animation of this character.
-
-
- Returns the path to the character's ScreenSelectMode icon.
-
-
- Returns the path to the character's ScreenStage icon.
-
-
- Returns the path of the warm-up animation of this character.
-
-
-
-
- Returns a table of all characters installed.
-
-
- Return the corresponding to sID
.
-
-
- Returns a random character.
-
-
- Returns the number of characters available.
-
-
-
-
- Loads the ComboGraph commands from the Metrics in group sMetricsGroup
.
-
-
- Sets the values of the ComboGraph using the specified StageStats and PlayerStageStats.
-
-
-
-
- Loads the ControllerStateDisplay from the specified GameController.
-
-
- Loads the ControllerStateDisplay from the specified MultiPlayer.
-
-
-
-
- Returns true
if all of the songs in the course have been defined (as opposed to random songs).
-
-
- Returns a table of all the Trails in the Course.
-
-
- Returns the path to the Course's background.
-
-
- Returns the path to the Course's banner.
-
-
- Returns the Course's directory.
-
-
- Returns a table of CourseEntry items.
-
-
- Gets the CourseEntry at iIndex
from the Course.
-
-
- Returns the Course's . (Returns CourseType in SM5; integer in SM4)
-
-
- Returns the description for this Course.
-
-
- Returns the full display title of the Course.
-
-
- Returns the estimated number of stages for the Course.
-
-
- Returns the goal seconds for the Course.
-
-
- Returns the Course's group name.
-
-
- Returns the Course's . (Returns PlayMode in SM5; integer in SM4)
-
-
- Returns the name of the person who scripted the Course.
-
-
- Returns the total length of the Course in seconds.
-
-
- Returns the full transliterated title of the Course.
-
-
- Returns true
if the Course has a background.
-
-
- Returns true
if the Course has a banner.
-
-
- Returns true
if the Course has modifiers.
-
-
- Returns true
if the Course has timed modifiers.
-
-
- Returns true
if the Course is an edit.
-
-
- Returns true
if the Course was automatically generated.
-
-
- Returns true
if the Course is Endless.
-
-
- Returns true
if the Course is Nonstop.
-
-
- Returns true
if the Course is Oni.
-
-
- Returns true
if the Course is playable in StepsType st
.
-
-
- Returns true
if the Course is a ranking course.
-
-
-
-
- Sets the CourseContentsList from the GameState.
-
-
-
-
- Returns the Song that this CourseEntry corresponds to.
-
-
-
- Returns the number of lives gained after completing the song.
-
-
- Returns the number of seconds gained after completing the song.
-
-
- Returns any stage (non-timed) modifiers.
-
-
- Returns the number of modifier changes in this CourseEntry.
-
-
- Returns a comma-delimited string representing various facts about the CourseEntry.
-
-
- Returns true
if this CourseEntry is a fixed song.
-
-
- Returns true
if this CourseEntry is secret.
-
-
-
-
- Generates a random UUID (version 4).
-
-
- Returns the MD5 hash for the file at sPath
.
-
-
- Returns the MD5 hash for s
.
-
-
- Returns the SHA-1 hash for the file at sPath
.
-
-
- Returns the SHA-1 hash for s
.
-
-
-
-
- All functions in this class have camel case equivalents, use whichever naming style you prefer.
- This spline implementation is a cubic spline.
- A spline is a line calculated from a small set of points with mathematical smooting applied.
- Splines can have any number of dimensions, but splines owned by actors (the ones inside NCSplineHandler and ActorMultiVertex) always have 3 dimensions.
-
-
- Solves the spline, setting the coefficients.
-
-
- Evaluates the spline at the given t value, returning a table of the results for each dimension of the spline.
- t can range from 0 to the value returned by get_max_t().
- A normal spline will return its starting point for any t value less than 0 and its end point for any t value greater than the max.
- A looped spline adjust the t value to be within the its range by adding or subtracting the max t as needed. (so if the max t is 4 and you evaluate at 5, it will return the same as if you evaluated at 1.)
-
-
- Evaluates the derivative at t.
-
-
- Evaluates the second derivative at t.
-
-
- Evaluates the third derivative at t.
- Second and third derivative functions exist because they're possible, not because they're expected to be useful. The fourth derivative would be 0 because the equation for evaluating the spline is "a + (b*t) + (c*t^2) + (d*t^3)".
-
-
- Sets point i of the spline to the position specified by the table p.
-
-
- Sets the coefficients of the spline at point i.
- Each table must contain a value for each dimension of the spline.
- Solving the spline normally should cover all normal usage, this is for people that want a spline with an abnormal behavior, so if you set the coefficients directly, expect to end up with an unsmooth shape.
-
-
- Returns a table containing the tables of coefficients for the point i.
-
-
- Sets the spatial extent of dimension d of the spline to e.
- The spatial extent exists to handle numbers that exist in a finite looped space, instead of the flat infinite space.
- To put it more concretely, spatial extent exists to allow a spline to control rotation with wrapping behavior at 0.0 and 2pi, instead of suddenly jerking from 2pi to 0.0.
-
-
- Returns the spatial extent of dimension d of the spline.
-
-
- Returns the max t value the spline extends to. For a normal spline, this will be size()-1. For a looped spline, this will be size().
-
-
- Sets the number of points in the spline. You must set the number of points before trying to set the position of any point.
-
-
- Returns the number of points in the spline.
-
-
- Sets the number of dimensions the spline has.
- Splines that are owned by actors (the ones inside ActorMultiVertex and NCSplineHandler) cannot have their number of dimensions changed because the actors require them to have 3 dimensions.
-
-
- Returns the number of dimensions the spline has.
-
-
- Returns true of the spline has zero points, or false if it has more than zero points.
-
-
- Sets whether the spline is looped. A looped spline is one where the end point is connected to the start point.
-
-
- Returns whether the spline is looped.
-
-
- Sets whether the spline is polygonal. If the spline is polygonal, then it will have straight lines between the points instead of curves.
-
-
- Returns whether the spline is polygonal.
-
-
- Sets whether the spline is dirty. A dirty spline is one that has been changed in some way that affects its shape. When solve() is called, the spline will only be solved if it is dirty. The dirty flag is automatically set by everything, so you should never have to call this function.
-
-
- Returns whether the spline is currently dirty.
-
-
- Destroys the spline, freeing the memory allocated for it. This can only be called on splines created with create_spline().
-
-
-
-
- Sets the DifficultyIcon's state from the difficulty passed in.
-
-
- Sets the DifficultyIcon's Player to pn
,
- then sets the DifficultyIcon's state from the difficulty of Steps pSteps
-
-
- Sets the DifficultyIcon's Player to pn
,
- then sets the DifficultyIcon's state from the difficulty of Trail pTrail
-
-
- Sets the DifficultyIcon's Player to pn
.
-
-
- Blanks the DifficultyIcon.
-
-
-
-
- Returns the index of the last banner loaded.
-
-
- Loads the fallback course banner.
-
-
- Loads the fallback banner.
-
-
- Loads the card image from the specified Character.
-
-
- Loads a Banner from a specified Course.
-
-
- Loads a Banner from a specified Song.
-
-
- Loads a Banner from a specified Song Group.
-
-
- Loads a Banner from a specified SortOrder.
-
-
- Loads an icon from the specified Character.
-
-
- Loads the Random banner.
-
-
- Loads the Roulette banner.
-
-
- See .
-
-
- See .
-
-
-
-
- Sets the StepsDisplayList from the GameState.
-
-
-
-
- Returns true
if notes are counted separately in this game.
-
-
- Returns the mapped judgment for tns
.
-
-
- Returns the name of the game such as "dance" or "pump".
-
-
- Returns whether this game allows the players to have separate styles.
-
-
-
-
- Returns any announcer that may have been set.
-
-
- Returns any Character associated with this item (or nil
if there isn't one).
-
-
- Returns any Course that may have been set.
-
-
- Returns a course difficulty, if one is set in the GameCommand.
-
-
- Returns a difficulty, if one is set in the GameCommand.
-
-
- Returns the index of this item.
-
-
- Returns any MultiPlayer that may have been set.
-
-
- Returns the choice name.
-
-
- Returns the PlayMode associated with this GameCommand.
-
-
- Returns any preferred modifiers that may have been set.
-
-
- Returns any Profile ID that may have been set.
-
-
- Returns any screen that may have been set as a string.
-
-
- Returns any Song that may have been set.
-
-
- Returns the name of any song group that may have been set.
-
-
- Returns the sort order, if the GameCommand has set one.
-
-
- Returns any stage modifiers that may have been set.
-
-
- Returns any Steps that may have been set.
-
-
- Returns any Style that may have been set.
-
-
- Returns the display text.
-
-
- Returns any Trail that may have been set.
-
-
- Returns any Url that may have been set.
-
-
-
-
- Return the first for the specified game
.
-
-
- Returns true
if any noteskins exist for the specified Game s
.
-
-
- Return the localized string representation of st
.
-
-
- Returns a table of all selectable games.
-
-
- Returns a table of all the styles for the that exist for game
.
-
-
- Sets the current game to Game
. The second argument is optional, and if provided will determine which theme is loaded when the game changes. If the second argument is not provided, the default theme from the preferences for the new game type will be loaded.
- If only the game changes, the screen specified by the Common::AfterGameChangeScreen metric will be loaded.
- If the game and the theme both change, the screen specified by the Common::AfterGameAndThemeChangeScreen metric will be loaded.
- The Common::InitialScreen metric will be used if the appropriate metric for the change is blank or invalid.
-
-
-
-
- Set the music volume to fVolume
for fDuration
seconds.
-
-
-
- Return the sound balance for pn
.
-
-
- Plays a sound from the current announcer.
-
-
- Play the sound at musicPath
starting from musicStart
for
- musicLength
seconds one time. Both fadeIn
and
- fadeOut
can be customized as required. loop
- tells the sound manager to loop the music part. applyRate
- tells the sound manager to apply the current music rate. If alignBeat
- is true or nil, the length is automatically adjusted to cover an integer number of beats.
-
-
- Play the sound at sPath
one time. is_action
is optional, if it is true, the sound is an action sound, and will be muted if the MuteActions preference is turned on.
-
-
- Stops the music.
-
-
- When music is requested to change, the new music does not start immediately due to latency and buffering. This will return true if the newest music has not yet actually begun.
-
-
-
-
- Adds another stage to the specifed player.
-
-
- Applies the specified modifiers for the specified player's preferred modifier set.
-
-
- Applies the song options of ModsLevel_Preferred to the other ModsLevels.
-
-
- Applies the specified modifiers for the specified player for the current stage.
-
-
- Returns true
if any player has performed a feat worthy of ranking.
-
-
- The second argument is optional. Apply the GameCommand represented by sCommand
- for pn
, if given. See .
-
-
- Checks various things to determine whether the game will crash when gameplay starts. Returns false and a string if gameplay cannot be entered safely.
- Might not work in all cases, but will catch things like a player not having
- steps set or no current song or style. Mainly exists for people with a custom ScreenSelectMusic replacement.
- Example:
- local can, reason= GAMESTATE:CanSafelyEnterGameplay()
- if not can then
- lua.ReportScriptError("Cannot safely enter gameplay: " .. tostring(reason))
- end
-
-
- Removes any stage modifiers that are illegal for course play.
-
-
- Returns true
if pn
's options will disqualify them for ranking.
-
-
- Returns true
if enough credits have been inserted to join.
-
-
- fishpolk.mid; See also: Rise of the Triad
-
-
- Returns the environment table. See .
-
-
- Returns the current for the specified .
-
-
- Returns the current .
-
-
- Return the number of inserted but unused coins. This number is
- decremented when players join.
-
-
- Return the number of coins needed to join based on the current coin and premium modes
- as well as the number of people joined, if that matters for the premium mode. See
- and .
-
-
- The s in a are numbered sequentially
- starting from 0. Return the number of the current .
-
-
- Return the current number of seconds that have passed in the current song. This value can be negative.
-
-
- Return the current .
-
-
- Return the current .
-
-
- Return the current .
-
-
- Return the current .
-
-
- Returns the current stage index (starts at 0).
-
-
- Return the current for the specified Player.
-
-
- Return a variable number of arguments based on the being
- played by all players. For each distinct being played by
- the players, in increasing order,
- the difficulty and description of the is returned as strings.
- For example,
- local credits = {GAMESTATE:GetCurrentStepsCredits()};
- will make a table of the difficulties and descriptions.
-
-
- Return the current .
-
-
- Return the current for the specified player.
-
-
- Return a string representation of the default song options.
-
-
- Returns the value.
-
-
- Return the easiest of the
- currently selected steps by all players. For example, if player 1 has
- selected Hard steps and player 2 has selected Medium steps, Medium will
- be returned.
-
-
-
-
-
- Return the Edit Local (during Profile editing)
- or nil
if it does not exist.
-
-
- Returns the ID of the Edit Local (during Profile editing).
-
-
- Return the source for the editor or nil
- if it does not exist.
-
-
- Returns a table of enabled players.
-
-
- Returns the name of the currently expanded section.
-
-
- Return the random seed for the game.
-
-
- Return true
if the gameplay lead in is enabled. If
- false
, gameplay begins immediately.
-
-
- Return the hardest of the
- currently selected steps by all players. For example, if player 1 has
- selected Hard steps and player 2 has selected Medium steps, Hard will
- be returned.
-
-
- Returns an array of s corresponding to Human players.
-
-
- Returns the index of the next song in the course.
-
-
- Returns the master player number.
-
-
- Returns true
if the game is Multiplayer.
-
-
- Returns the PlayerState for the specified MultiPlayer.
-
-
- Returns the number of active multiplayer NoteFields.
-
-
- Returns the number of players enabled.
-
-
- Returns the number of sides joined.
-
-
- Returns the number of stages for the current Song and its Steps or the current Course.
-
-
- Returns the number of stages left for player pn
.
-
-
- Returns the display name for player pn
.
-
-
- Returns the PlayerState for player pn
.
-
-
- Returns the current PlayMode.
-
-
- Returns the preferred difficulty.
-
-
- Returns the preferred song.
-
-
- Returns the preferred song group.
-
-
- Returns the current Premium.
-
-
-
- Returns the smallest number of stages left for any human player.
-
-
- [01 alias.lua] Returns the current beat of the song.
-
-
- [01 alias.lua] Returns the current beat of the song without an offset.
-
-
- Returns the current visible beat of the song.
-
-
- [01 alias.lua] Returns the song's current beats per second.
-
-
- [01 alias.lua] Returns true
if a delay is active in the song.
-
-
- [01 alias.lua] Returns true
if the song is currently in a freeze.
-
-
- Returns the song options for the specified ModsLevel as a string.
-
-
- Returns the song options as a string.
-
-
- Returns the song options for the specified ModsLevel as an object.
-
-
- Returns how much of the song is through at beat fBeat
.
-
-
- Returns the current SongPosition.
-
-
- Returns the current SortOrder.
-
-
- Returns the StageResult for player pn
.
-
-
- Returns the current stage index.
-
-
- Returns the current StepsSeconds, which is the time value used to set the samples in a player's life record.
-
-
- Return the random seed for the current stage.
-
-
- Returns true
if the workout goal is complete.
-
-
- Returns true
if an extra stage was earned.
-
-
- Returns true
if either player does not have a profile loaded, and there is a loadable profile.
-
-
- Returns true
if either player has a profile loaded.
-
-
- Returns true
if we are specifically in the Step Editor's
- editing portion. If in recording or playing mode, this will return
- false
.
-
-
- Inserts iCoins
number of coins. iCoins
can be negative or positive.
-
-
- Inserts one credit. To deduct a credit, pass a negative integer representing the number
- of coins per credit to InsertCoin.
-
-
- Returns true
if this is an extra stage.
-
-
- Returns true
if any human player is using a memory card.
-
-
- Returns true
if playing in Battle mode.
-
-
- Returns true
if playing in a Course mode.
-
-
- Returns true
if in Demonstration mode.
-
-
- Returns true
if the match was a draw.
-
-
- Returns true
if Event Mode is on, temporary or otherwise.
-
-
- Returns true
if this is the first extra stage.
-
-
- Returns true
if this is the second extra stage.
-
-
- Returns true
if player pn
has completed the current Goal.
-
-
- Returns true
if player pn
is human.
-
-
- Returns true
if player pn
is enabled.
-
-
- Returns true
if player pn
has joined the game.
-
-
- Returns true
if player pn
is the winner.
-
-
- Joins player pn
. Does not deduct coins.
-
-
- Similar to JoinPlayer, but checks whether the player is allowed to join and returns false if the player is not allowed to join. Also deducts coins for joining. A player can't join if PlayersCanJoin() returns false, or that side is already joined (is true for both sides when in a style that is OnePlayerTwoSides), or there are not enough coins.
-
-
- If profiles are not loaded, this will load the profiles for each player. It will load from memory cards if they are present, and local profiles otherwise. It will load edits if LoadEdits
is true, or by default if the argument is omitted.
-
-
- Returns true
if player pn
is using modifier sModifier
.
-
-
- Returns true
if players can join the game.
-
-
- Refreshes the NoteSkin data for the current game.
-
-
- Resets the GameState.
-
-
- Resets the specific Player's mods to the default settings.
-
-
- Saves the bookkeeping and machine profile data.
-
-
- Save profiles.
-
-
- Sets the current for the specified .
-
-
- Sets the current Course to course
.
-
-
- Sets the current PlayMode to pm
.
-
-
- Sets the current Song to song
.
-
-
- Sets Player pn
's current Steps to steps
.
-
-
- Sets current Style to the provided style. Either a style object or a style string can be provided. If current steps for either player are not valid in the new style, they will be cleared.
-
-
- Sets the current Trail to trail
.
-
-
- Tells the engine that the theme explicitly set the fail type for the players so that it won't override it with the easier settings for beginner or easy.
-
-
- Sets if the Jukebox should use modifiers.
-
-
-
-
-
- Sets the number of multiplayer notefields to iFields
-
-
- Sets the preferred difficulty of Player pn
to Difficulty dc
.
-
-
- Sets the preferred Song to song
.
-
-
- Sets the preferred song group to sGroup
.
-
-
- Sets the Song Options from so
using ModsLevel m
.
-
-
- Turns temporary Event Mode on or off, depending on bOn
.
-
-
- Stores the ranking name for the player. Use this at the end of a round, on a name entry screen or similar, to set the name for the high scores the player has earned.
-
-
- Determines if Judgment W1 should be shown based on bOn
.
-
-
- Unjoins player pn
.
-
-
-
-
- Loads the GradeDisplay commands from the Metrics in group sMetricsGroup
.
-
-
- Sets the GradeDisplay to show Grade g
.
-
-
-
-
- Loads the GraphDisplay commands from the Metrics in group sMetricsGroup
.
-
-
- Sets the values of the GraphDisplay using the specified StageStats and PlayerStageStats.
-
-
-
-
- Sets the GrooveRadar values for Player pn
to empty.
-
-
- Sets the GrooveRadar values for Player pn
from RadarValues rv
-
-
- Sets the GrooveRadar values for Player pn
to the specified (floating point) values in the table.
-
-
-
-
- Returns two tables representing the tips and alternate tips in the HelpDisplay.
-
-
- [02 HelpDisplay.lua] Sets the tips from a Song or Course.
-
-
- Sets the seconds between switches of tips to fSeconds
.
-
-
- Sets the HelpDisplay's tips using tips
(and optionally altTips
).
-
-
- Sets the HelpDisplay's text from sTips
using colons to separate new sections.
-
-
-
-
- Returns the date and time the high score was achieved.
-
-
- Returns the Grade of this high score.
-
-
- Returns the HighScore for this PlayerStageStats.
-
-
- Return the number of HoldNoteScores that match hns
.
-
-
- Returns the Max Combo of this high score.
-
-
- Returns the modifiers used for this HighScore.
-
-
- Returns the name associated with the high score.
-
-
- Returns the Peak Combo Award for this high score.
-
-
- Returns the percentage of dance points associated with the high score.
-
-
- Returns the RadarValues for this HighScore.
-
-
- Returns the score associated with the high score.
-
-
- Retrns the Stage Award for this high score.
-
-
- Returns the number of seconds survived associated with the high score.
-
-
- Return the number of TapNoteScores that match tns
.
-
-
- Returns true
if this high score's name uses a fill-in marker.
-
-
-
-
- You can get a HighScoreList using .
-
-
- Returns a table of the high scores.
-
-
- Returns the highest score for name in the list. Returns nil if there is no score for name in the list.
-
-
- Returns the rank of the highest score for name in the list. Returns 0 if there is no score for name in the list. (returns 1 if name has the top score, 2 if name has the second place score, and so on)
-
-
-
-
- Loads the HoldJudgment for the specified MultiPlayer.
-
-
-
-
- Returns the mouse wheel value.
-
-
- Returns the X position of the mouse.
-
-
- Returns the Y position of the mouse.
-
-
-
-
- Returns the amount of life left in the LifeMeter as a float in the range 0..1.
-
-
- Returns true
if failing.
-
-
- Returns true
if the LifeMeter is "hot".
-
-
- Returns true
if in danger.
-
-
-
-
- Changes the player's life by iNumLives
. (Negative values subtract lives.)
-
-
- Returns the number of lives remaining.
-
-
- Returns the number of total lives.
-
-
-
-
- Returns true
if player pn
's card is locked.
-
-
- Return the state for player pn
.
-
-
- Returns the name of the storage device.
-
-
- Returns true
if player pn
's name is available.
-
-
-
-
- Stops the MenuTimer by setting it to 99.99 and pausing.
-
-
- Returns the current MenuTimer's value.
-
-
- Pauses the MenuTimer, stopping it from counting down.
-
-
- Compatibility alias for SetSeconds.
-
-
- Sets the MenuTimer's value to fSeconds
.
-
-
- Sets the MenuTimer's silent setting to bSilent
.
-
-
- Starts up the timer.
-
-
- Sets the MenuTimer's stealth setting to bStealth
. If
- true
, the timer will be invisible and silent.
-
-
- Stops the MenuTimer by setting it to 0 and pausing.
-
-
-
-
- Broadcast the message to all listeners subscribed to sMessage
. The
- second argument is an optional table of parameters. It may be omitted or explicitly
- set to nil
.
-
-
- Sets whether logging of messages is enabled. If log is true, all messages that pass through Broadcast (from the engine for from the theme or from anywhere else), will be logged with Trace.
-
-
-
-
- Sets the width of the MeterDisplay to fWidth
.
-
-
-
-
- Returns the model's default animation.
-
-
- Controls if the model should loop or not.
-
-
- Plays animation sAniName
at fPlayRate
speed (default 1.0).
-
-
- Sets how far into the animation the model is.
-
-
- Sets the current animation's playback rate to fRate
.
-
-
- Sets the model's default animation to sAnimation
at fPlayRate
speed (default 1.0).
-
-
-
- Returns the number of states the Model has.
-
-
-
-
- Loads the ModIconRow of Player pn
from the Metrics in group sMetricsGroup
.
-
-
-
-
- Changes the sort order of the wheel. Returns true
if the order was changed.
-
-
- Returns the name of the currently selected section.
-
-
- Returns true
if the MusicWheel is currently handling Roulette selection.
-
-
- Selects a song. Returns false
on failure.
-
-
- Selects a course. Returns false
on failure.
-
-
-
-
- Returns a string from the specified element and value.
-
-
- Returns a string from the specified element and value using NoteSkin sNoteSkin
.
-
-
- Returns a command from the specified element and value.
-
-
- Returns a command from the specified element and value using NoteSkin sNoteSkin
.
-
-
- Returns a bool from the specified element and value.
-
-
- Returns a bool from the specified element and value using NoteSkin sNoteSkin
.
-
-
- Returns a float from the specified element and value.
-
-
- Returns a float from the specified element and value using NoteSkin sNoteSkin
.
-
-
- Returns a integer from the specified element and value.
-
-
- Returns a integer from the specified element and value using NoteSkin sNoteSkin
.
-
-
- Returns the path for the specified sButton sElement
.
-
-
- Returns the path for the specified sButton sElement
using NoteSkin sNoteSkin
.
-
-
- Returns the actor for the specified sButton sElement
.
-
-
- Returns the actor for the specified sButton sElement
using NoteSkin sNoteSkin
.
-
-
-
- Returns true
if the strName
noteskin exists in the current gametype.
-
-
- Returns a table of noteskin names for the current gametype.
-
-
-
-
- All functions in this class have camel case equivalents, use whichever naming style you prefer.
- The spline handler holds info on how the spline is used by the engine.
- Each get/set pair of functions in this class is for a different aspect of the spline's behavior.
-
-
- Returns the spline for this handler.
-
-
- Returns the beats per t value of the spline. If the beats_per_t is 4, then a note must be on screen for 4 beats to traverse from one point on the spline to the next.
-
-
- Sets the beats per t value for the spline.
-
-
- Returns the t value that receptors are evaluated at.
-
-
- the t value that receptors are evaluated at.
-
-
- Returns the mode the spline is set to.
- "NoteColumnSplineMode_Disabled" means the spline will not affect the notes or receptors at all.
- "NoteColumnSplineMode_Offset" means the spline will added to the effects from the mods.
- "NoteColumnSplineMode_Position" means only the spline affect the notes and mods will be ignored. (but only mods that affect the same aspect of the note as the spline will be disabled. So a rotation spline won't disable Mini or Tiny, but a zoom spline will, and a zoom spline won't disable Dizzy, Twirl, or Roll, but a rotation spline will.)
-
-
- Sets the current spline mode for this handler.
-
-
- Returns whether the current song beat is subtracted from a note's beat when calculating the t value to use on the spline.
-
-
- Sets whether the current song beat is subtracted from a note's beat when calculating the t value to use on the spline.
-
-
-
-
- All functions in this class have camel case equivalents, use whichever naming style you prefer.
- Position, rotation, and zoom each have separate spline handlers to allow them to have separate independent behavior.
- It is important to note that the spline handlers are inside the tween state, so whenever you start a new tween on the actor, you need to refetch the spline handlers.
-
-
- Returns the handler for the position spline.
-
-
- Returns the handler for the rotation spline.
- The rotation applied by the rotation spline is in radians.
- For convenience, the spatial extent of the rotation spline defaults to 2pi.
-
-
- Returns the handler for the zoom spline.
-
-
-
-
- All functions in this class have camel case equivalents, use whichever naming style you prefer.
-
-
- Makes the NoteField act as if a hold note was hit in the column, with the given score and bright setting.
- The callback for did_hold_note will not be called.
-
-
- Makes the NoteField act as if a tap note was hit in the column, with the given score and bright setting.
- The callback for did_tap_note will not be called.
-
-
- Returns a table of the actors for the columns. This means that each column is an actor, so you can move it around or animate it like an actor. See the NoteColumnRenderer class for a list of special functions for the column's actor.
-
-
- Same as SetDidTapNoteCallback, but for hold notes. Uses HoldNoteScore instead of TapNoteScore.
-
-
- Sets the function that the NoteField will call whenever a tap note is hit.
- The callback function is passed the column, the TapNoteScore, and whether the explosion will be bright.
- The callback function can return changed values for the NoteField to use instead of the ones that were passed.
- Pass nil instead of a function to clear the callback.
-
-
- Makes the NoteField act as if a press occurred in the column.
- The callback for set_pressed will not be called.
-
-
- Sets the function that the NoteField will call whenever a press occurs.
- The callback function is passed the column for the press.
- The callback function can return changed values for the NoteField to use instead of the ones that were passed.
- Pass nil instead of a function to clear the callback.
-
-
- Sets the function that the NoteField will call whenever a step occurs.
- The callback function is passed the column and the TapNoteScore for the step.
- The callback function can return changed values for the NoteField to use instead of the ones that were passed.
- Pass nil instead of a function to clear the callback.
-
-
- Makes the NoteField act as if a step occurred in the column with the given score.
- The callback for Step will not be called.
-
-
-
-
- Returns true
if the first item in the row goes down.
-
-
- Returns an index of the choice in the row that player pn
is on.
-
-
- Returns the OptionRow's layout type.
-
-
- Returns the name of the OptionRow.
-
-
- Returns the number of choices in this OptionRow.
-
-
- Returns the row title string.
-
-
- Returns the OptionRow's select type.
-
-
- Returns true
if this row is focused by player pn
.
-
-
- Returns true
if this row forces one choice on all players.
-
-
-
-
- Sets the PaneDisplay from the GameState.
-
-
-
-
- Sets the PercentageDisplay from the specified PlayerState and PlayerStageStats.
-
-
-
-
- Changes the life value by delta. This will broadcast a LifeChangedMessageCommand, to allow custom life bars to update to the new value. Do not call ChangeLife from within LifeChangedMessageCommand.
-
-
- Sets the life to value. This will broadcast a LifeChangedMessageCommand, to allow custom life bars to update to the new value. Do not call SetLife from within LifeChangedMessageCommand.
-
-
- Returns the current TimingData for this player.
-
-
- Sets Actor with Combo position.
-
-
- Sets Actor with Judgment position.
-
-
-
- (PlayerInfo is a part of ScreenGameplay.)
-
- Returns the of player pn
.
-
-
- Returns the Steps located at index
in the current steps queue.
-
-
-
-
- All these functions have an optional last argument: If the last argument is the boolean value true, then instead of returning the previous settings as normal, they will instead return the PlayerOptions object.
- This allows you to chain them like this:
- player_options:Twirl(5, 1, true):Roll(5, true):Dizzy(true):Twirl()
-
- Special note: Functions that take a bool as their arg must have true as the second arg to be used with chaining.
- "player_options:Backwards(true, true):Beat(5)" will chain, "player_options:Backwards(true):Beat(5)" will not chain.
-
- Most options fall into one of four types: float, int, bool, or enum.
- Float type options have this interface:
- Option(value, approach_speed)
- If value is a float, sets the TimeSpacing modifier to value.
- If approach_speed is a float, sets the speed of the transition to approach_speed. Returns the previous values of both.
- approach_speed is in units of n per second. value will be approached at the rate of approach_speed per second.
- Note that the value and the approach speed arguments are both independently optional.
- Example:
- a,b= options:Boost() -- Sets a to the current value and b to the current approach_speed.
- a,b= options:Boost(5, .5) -- Stores the previous values in a and b, NOT to 5 and .5. Sets the value to 5 and the approach speed to .5.
- a,b= options:Boost(5) -- Sets a and b to the previous values, NOT to 5 and .5. Sets the value to 5 and leaves the approach speed at whatever it was.
-
- Setting the approach speed only matters when modifying the PlayerOptions from ModsLevel_Song.
- Int type options are similar to float in that they return and take a number, but they do not have an approach speed.
- Bool type options have an almost identical interface, the difference is that they can not have an approach speed.
- Enum type options are almost identical to bool type. They take and return an enum value.
- For brevity, the functions are only given a description if the option requires careful handling or does not follow the float or bool interfaces.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- If the player has a CMod set, returns the value of that CMod and its associated approach speed. Returns nil otherwise.
- If the optional first argument is passed, sets the CMod to the value and disables any XMod or MMod that is set.
- If the optional second argument is passed, sets the speed at which the transition occurs.
-
-
-
-
-
-
-
- If the player is using Distant (zero skew and positive tilt), returns the value of tilt and its approach_speed.
- Returns nil otherwise.
- If the optional first argument is passed, sets tilt to value and skew to zero.
- If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
-
-
-
-
-
-
- Sets the for the player, if the optional argument is provided. Returns the that was previously set.
-
-
-
-
- Returns true if step attacks or random attacks are enabled.
-
-
- Returns true
if the current PlayerOptions makes the current Course/Trail easier.
-
-
- Returns true
if the current PlayerOptions makes the current Song/Steps easier.
-
-
- If the player is using Hallway (zero skew and negative tilt), returns the value of tilt and its approach_speed.
- Returns nil otherwise.
- If the optional first argument is passed, sets tilt to negative value and skew to zero.
- Pass in a positive value for the familiar meaning of Hallway.
- If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
-
-
-
-
-
- If the player is using Incoming ((positive skew and negative tilt) or (negative skew and positive tilt)), returns the value of skew and its approach_speed.
- Returns nil otherwise.
- If the optional first argument is passed, sets tilt to negative value and skew to value.
- Pass in a positive value for the familiar meaning of Incoming.
- If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
-
-
-
-
-
-
- MaxScrollBPM is one of the variables for controlling the speed mod.
- Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
- It is the setting for the MMod.
- MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
-
-
-
- Sets the min TapNoteScore required for the notes to disappear after being hit.
-
-
- If the player has a MMod set, returns the value of that MMod and its associated approach speed. Returns nil otherwise.
- If the optional first argument is passed, sets the MMod to the value and disables any CMod or XMod that is set.
- If the optional second argument is passed, sets the speed at which the transition occurs.
- MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sets the NoteSkin to the named noteskin, unless name is nil or the noteskin does not exist. Returns the name of the previous noteskin and whether the set attempt succeeded.
- Changing the noteskin during a song is not supported.
- Example:
- note_name= options:NoteSkin() -- Sets note_name to the player's current noteskin.
- prev_note_name, succeeded= options:NoteSkin("cel") -- Sets prev_note_name to the noteskin the player had set, changes the current noteskin to "cel", sets succeeded to true if the "cel" noteskin exists.
-
-
- If the player is using Overhead (0 tilt, 0 skew), returns true.
- If true is passed, sets the tilt and skew to 0.
-
-
-
-
-
-
-
-
-
-
-
-
- ScrollBPM is one of the variables for controlling the speed mod.
- Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
- It is the setting for the CMod.
-
-
- ScrollSpeed is one of the variables for controlling the speed mod.
- Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
- It is the setting for the XMod.
-
-
-
- Skew is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.
- Skew moves the vanishing point for the note field away from the center of the screen.
- Skew has no effect in single mode if Center1Player is true.
- Skew has no effect in double mode.
-
-
-
-
- If the player is using Space ((positive skew and positive tilt) or (negative skew and negative tilt)), returns the value of skew and its approach_speed.
- Returns nil otherwise.
- If the optional first argument is passed, sets tilt to value and skew to value.
- If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
-
-
-
-
-
-
-
-
- TimeSpacing is one of the variables for controlling the speed mod.
- Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
- It controls whether the speed mod is in X mode or C mode. It should only be set to 0 or 1, and is only a float value to allow tweening between the two states.
-
-
- Tilt is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.
- Tilt tilts the note field forward and back.
-
-
-
-
-
-
-
-
- Returns true
if the player is using reverse. (equivalent to GetReverse() == 1.0
)
-
-
-
-
- If the player has a XMod set, returns the value of that XMod and its associated approach speed. Returns nil otherwise.
- If the optional first argument is passed, sets the XMod to the value and disables any CMod or MMod that is set.
- If the optional second argument is passed, sets the speed at which the transition occurs.
-
-
-
-
-
- Fails the player.
-
-
- Returns true
if a full combo (TNS_W3 and up) was obtained.
-
-
- Returns true
if a full combo (tns
and up) was obtained.
-
-
- Returns the number of Dance Points obtained by the player.
-
-
- Returns how long the player has been alive.
-
-
- Returns the best tap note score for a full combo.
-
-
- Returns the number of calories burned.
-
-
- Returns a table of all the combos. Each entry in the table is a table containing the StartSecond, SizeSeconds, Count, Rollover, StageCount, and IsZero information for that combo.
-
-
- Returns the current possible maximum score.
-
-
- Returns the player's current combo.
-
-
- Returns the player's current life from 0..1.
-
-
- Returns the player's current miss combo.
-
-
- Returns the number of Dance Points possible to be obtained by the player.
-
-
- Returns the player's current score multiplier.
-
-
- Returns true
if the player failed.
-
-
- Returns the player's grade.
-
-
- Returns the player's HighScore.
-
-
- Returns the number of judgments for a specified HoldNoteScore.
-
-
- Returns the player's actual score on the lesson.
-
-
- Returns the score needed to pass the lesson.
-
-
- Returns table of samples of the life record from 0 to last_second.
- 'samples' determines the size of the table. 'samples' defaults to 100
- if not specified.
-
-
- Returns the player's life remaining seconds.
-
-
- Returns the machine high score index for this performance.
-
-
- Returns the number of controller steps.
-
-
- Returns the peak combo award for this performance.
-
-
- Returns the personal high score index for this performance.
-
-
- Returns a table of played steps.
-
-
- Gets the percentage of taps that were scored as tns
.
-
-
- Returns the player's Dance Point percentage.
-
-
- Returns the number of possible Dance Points.
-
-
- Returns a table of possible steps.
-
-
- Returns a RadarValues object representing the player's actual performance.
-
-
- Returns a RadarValues object representing the total values for the song.
-
-
- Returns the score.
-
-
- Returns the number of songs passed.
-
-
- Returns the number of songs played.
-
-
- Returns the stage award for this performance.
-
-
- Returns how long the player survived in seconds.
-
-
- Returns the number of judgments for a specified TapNoteScore.
-
-
- Returns the max combo for this performance.
-
-
- Returns true
if the player was disqualified from ranking.
-
-
-
-
- Applies the player options of ModsLevel_Preferred to the other ModsLevels.
-
-
- Returns the current PlayerOptions for this PlayerState.
-
-
- Returns the HealthState for this PlayerState.
-
-
- Returns the multiplayer number for this PlayerState.
-
-
- Returns the PlayerController for this PlayerState.
-
-
- Returns the player number for this PlayerState.
-
-
- Returns a PlayerOptions object for the specified ModsLevel.
-
-
- Returns a string of player options for the specified ModsLevel. (was GetPlayerOptions
before sm-ssc v1.2.3)
-
-
- Returns a table of strings, containing the player options for the specified ModsLevel.
-
-
- Returns the SongPosition for this PlayerState.
-
-
- Returns the current Super Meter level for this PlayerState.
-
-
- Sets the player options to sPlayerOptions
for the specified ModsLevel.
-
-
-
-
- Return the value of the preference sPreference
.
-
-
- Return true if preference sPreference
exists.
-
-
- Set the value of the preference sPreference
to value
.
-
-
- Reset preference sPreference
to the default value.
-
-
- Saves preferences to disk.
-
-
-
-
- Adds cals to the daily total.
-
-
- Adds a screenshot entry to the profile. filename must be the full path of the screenshot, as returned by SaveScreenshot.
-
-
- Calculates the number of calories burned based on the heart rate (in beats per minute), the duration (in seconds), and data in the profile.
-
-
- Returns the age.
-
-
- Returns a table of all high score names that have been used on this profile.
-
-
- Returns the birth year.
-
-
- Returns the number of calories burned during the current day.
-
-
- Returns the profile's high scores for the specified ranking category.
-
-
- Returns the Character being used by this profile.
-
-
- Returns a composite of your high scores over courses with the specified StepsType and Difficulty.
-
-
- Returns the percentage of courses that you've completed with the specified StepsType and Difficulty.
-
-
- Returns the possible score of courses with the specified StepsType and Difficulty.
-
-
- Returns the profile's display name.
-
-
- Return the number of calories burned as a string.
-
-
- Returns the number of calories needed to reach the goal.
-
-
- Returns the number of seconds needed to reach the goal.
-
-
- Returns the current goal type.
-
-
- Returns the GUID of this Profile.
-
-
- Returns whether this profile ignores the step count based calorie calculation.
-
-
- Returns whether this profile uses the male formula when CalculateCaloriesFromHeartRate is used.
-
-
- Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t
)
-
-
- Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t
)
- If the profile does not have a HighScoreList for the Song and Steps, returns nil. Use this to avoid increasing the memory footprint of the profile when checking the score lists for every song and steps.
-
-
- Returns the last played Course for this profile.
-
-
- Returns the last played Song for this profile.
-
-
- Returns the last used high score name.
-
-
- Returns the number of Toasties gotten using the specified profile.
-
-
- Returns the profile's most popular course.
-
-
- Returns the profile's most popular song.
-
-
- Returns the total number of songs played with the profile.
-
-
- Returns the position the profile should have in its category in the list.
-
-
- Returns the number of times song s
has been played with the profile.
-
-
- Returns a composite of your high scores over songs with the specified StepsType and Difficulty.
-
-
- Returns the percent complete for all songs and courses for the specified StepsType st
.
-
-
- Returns the percentage of songs that you've completed with the specified StepsType and Difficulty.
-
-
- Returns the possible score of songs with the specified StepsType and Difficulty.
-
-
- Return the total number of calories burned.
-
-
- Returns the number of dance points earned.
-
-
- Returns the number of Hands stepped on.
-
-
- Returns the number of successful Holds.
-
-
- Returns the number of Jumps stepped on.
-
-
- Returns the number of successful Lifts.
-
-
- Returns the number of Mines stepped on.
-
-
- Returns the total number of songs played with the profile.
-
-
- Returns the number of successful Rolls.
-
-
- Returns the number of steps with the specified StepsType and Difficulty that you've scored a certain Grade g
on.
-
-
- Returns the number of Taps and successful Holds.
-
-
- Returns the number of trails with the specified StepsType and Difficulty that you've scored a certain Grade g
on.
-
-
- Returns the type of the profile. The type of the profile is only used to determine where the profile shows up in the list of profiles, and that problem is already handled by ProfileManager, so if you're reading this, this function only exists so you can make your theme color this profile's list entry based on the type or something like that.
-
-
- Returns the user table for this Profile.
-
-
- Returns the VO2 max for this profile.
-
-
- Returns how much the player weighs.
-
-
- Returns true
if the player has passed any steps in the specified Song s
.
-
-
- Returns true
if the specified code sUnlockEntryID
is unlocked.
-
-
- Sets the birth year of the profile.
-
-
- Sets the current for the Profile.
-
-
- Sets the display name of the profile to name.
-
-
- Sets the goal to iCals
calories.
-
-
- Sets the goal to iSecs
seconds.
-
-
- Sets the current goal type to gt
.
-
-
- Sets whether this profile ignores the step count based calorie counting.
-
-
- Sets whether this profile uses the male formula when CalculateCaloriesFromHeartRate is used.
-
-
- Sets last used high score name.
-
-
- Sets the VO2 max for the profile. 0 is treated as unset.
-
-
- Sets how much the player weighs (in pounds) to weightPounds
.
-
-
-
- Returns the amount of time this profile has spent in gameplay (in seconds).
-
-
- Returns the number of sessions this profile has had.
-
-
- Returns the total session length (in seconds) of this profile.
-
-
-
-
- Returns the Profile for the specified profile ID.
-
-
- Returns a table of the local profile display names.
-
-
-
-
- Returns a table of the local profile IDs.
-
-
-
- Retuns the machine profile.
-
-
- Retuns the amount of local profiles.
-
-
- Returns the player name for player pn
.
-
-
- Returns the profile for player pn
.
-
-
- Returns the profile directory of the specified ProfileSlot
.
-
-
- Returns the number of times Song s has been played with the specified ProfileSlot.
-
-
- Returns the current stats prefix.
-
-
- Returns true
if player pn
's profile is persistent.
-
-
- Returns true
if Song s
has never been played before (according to the machine profile).
-
-
-
-
- Returns true
if the profile from the memory card is new.
-
-
- Returns true
if pn
's Profile was loaded from a memory card.
-
-
-
- Returns true
if the last load of player pn
's profile was a LastGood copy of the profile.
-
-
- Returns true
if the last load of player pn
's profile resulted in a tampered or corrupt profile.
-
-
- Saves the local profile with the specified ID.
-
-
- Saves the machine profile.
-
-
- Saves the profile for player pn
.
-
-
- Sets the current stats prefix. The stats prefix is prepended to the Stats.xml file when loading or saving a profile. SetStatsPrefix will reload all profiles from the Stats.xml that has the given prefix. In general, score entries are the only thing not preserved when changing the stats prefix. Profile::HandleStatsPrefixChange in Profile.cpp lists the fields that are preserved.
-
-
-
-
- Returns the value of rc
from .
-
-
-
-
- You must call create_bezier to create a RageBezier2D to use any of these functions. When you are done with the object, destroy it with its destroy function to avoid a memory leak.
- A RageBezier2D is two RageQuadratics, one for the x coordinate and one for the y.
- This class is provided as a tool for designers working with bezier tweens who need a tool that displays the tween curve visually.
- If you use Actor:tween(time, "TweenType_Bezier", {xa, ya, xb, yb, xc, yc, xd, yd}) to tween an actor, the actor creates a RageBezier2D internally and calls evaluate_y_from_x each frame to set where it is in the tween.
-
-
- Destroys the RageBezier2D. Do not attempt to use it after it has been destroyed.
-
-
- Evaluates the bezier curve at the given t and returns the x and y values. This is equivalent to using get_x and get_y to fetch the quadratic parts and calling evaluate on them directly.
-
-
- Takes the x given and converts it to a t value, then evaluates the y quadratic with the t value and returns the result.
-
-
- Returns the RageQuadratic used for the x component.
-
-
- Returns the RageQuadratic used for the y component.
-
-
- Sets the values used by the two quadratics. This is equivalent to using get_x and get_y to get the quadratics and setting them directly. Note that the components for the x quadratic and the y quadratic are interleaved.
-
-
-
-
- Return the height of the display.
-
-
- Return the width of the display.
-
-
- Return the number of frames per second.
-
-
- Return the VPF.
-
-
- Return the cumulative FPS.
-
-
-
-
- These commands require a RageFile handle. You can create one using
- .
-
-
- Returns true
if the current position within the file is the end. (EOF = End of File)
-
-
- Clears the last error message.
-
-
- Closes the file and releases it from memory.
-
-
- Safely deletes the file handle.
-
-
- Flushes the buffer for the file handle, writing any pending output to disk.
-
-
- Gets the last error message and returns it.
-
-
- Gets a line and returns it.
-
-
- Opens a file at sPath
(relative to the StepMania root directory).
- iAccessType
can be set to read (1
), write (2
), stream (4
) or flush to disk on close (8
).
- These can also be combined with addition. For example, to set up read and write, set iAccessType
to 3
(1+2).
-
-
- Puts a new line in the file.
-
-
- Returns a string containing the entire contents of the file.
-
-
- Returns length
bytes from the RageFile's current position.
-
-
- Seeks to a position in the file and returns the new position.
-
-
- Returns the current position in the file.
-
-
- Writes a file with the contents of str
.
-
-
-
-
- Returns true
if a file exists at sPath
.
-
-
- Returns a listing of files from sPath
. The last two arguments are optional (and default to false).
-
-
- Returns a file's size in bytes.
-
-
- Returns the hash of the file at sPath
.
-
-
-
-
- Return an array of connected input device descriptions.
-
-
-
-
- If you use Actor:tween(time, "TweenType_Bezier", {a, b, c, d}) to tween an actor, the actor creates a RageQuadratic internally and calls evaluate each frame to set where it is in the tween.
-
-
- Evaluates the quadratic at the given t value and returns the result.
-
-
- Returns the four values that form the quadratic equation. This function returns multiple values, so you must do something like this to get them:
- a, b, c, d= quadratic:get_bezier()
-
-
- Equivalent to evaluate(1), but faster.
-
-
- Equivalent to evaluate(0), but faster.
-
-
- Returns the slope of the curve at the given t value.
-
-
- Sets the four values that form the quadratic equation.
-
-
- Sets the four values that form the quadratic equation, treating the arguments as from a cubic equation instead of as from a bezier curve.
-
-
-
-
- See for loading a sound.
-
-
- Returns the length of the sound loaded into this RageSound. Returns -1 if no sound is loaded.
-
-
- Actually sets the value of sProperty
to fVal
. The supported properties depend on how the associated was loaded.
-
-
- Attempts (and typically fails) to set the value of sProperty
to fVal
. The supported properties depend on how the associated was loaded.
-
-
- Sets the pitch to fPitch
. The associated have SupportsRateChanging = true
on load.
-
-
- Sets the speed (that is, the rate at which the sound plays) to fSpeed
. The associated must have SupportsRateChanging = true
on load.
-
-
- Sets the volume to fVolume
, which is between 0..1.
-
-
-
-
- Returns the source width.
-
-
- Returns the source height.
-
-
- Returns the texture width.
-
-
- Returns the texture height.
-
-
- Returns the image width.
-
-
- Returns the image height.
-
-
- Returns the number of frames in this texture.
-
-
- Returns the path to the texture's file.
-
-
- Return the texture coordinate rectangle as {left, top, right, bottom}
.
-
-
- Sets the animation or movie looping to bLoop
.
-
-
- Sets the animation or movie position to fPos
.
-
-
- Sets the animation or movie playback rate to fRate
.
-
-
- Reloads the texture.
-
-
-
-
- Loads the metrics for this RollingNumbers from sGroupName
.
-
-
- Sets the target number to f
.
-
-
-
-
- This adds the lua function "callback" to the list of functions the screen will pass input to. Whenever an input event occurs, callback will be passed a table with the details of the event. callback must return a bool to indicate whether the event was handled. If callback returns true, the event will not be passed any further.
- This should not be used to provide text input because that would not handle localization or different keyboard layouts.
- The screen and the callbacks will both be passed input events, so be aware of what input the current screen responds to and consider the effects.
- Details of the table containing the event data:
- {
- DeviceInput= { -- The raw details of the event.
- device= string, -- The type of device. The first half of the string will be "Device_", the second half will be from InputDeviceNames in RageInputDevice.cpp.
- button= string, -- The button that was pressed. the first half of the string will be "DeviceButton_", the second half will be from InitNames in RageInputDevice.cpp.
- level= float, -- A floating point value for analog input.
- z= float, -- Mousewheel input.
- down= bool, -- Whether the button is down. This is level with a threshold and debouncing applied.
- ago= float, -- How long ago this input occurred, in seconds.
- is_joystick= bool, -- True if the device is a joystick.
- is_mouse= bool -- True if the device is a mouse.
- }, -- This ends the list of things inside the DeviceInput part of the table.
- controller= string, -- The game controller this event was mapped to. "GameController_1" or "GameController_2", or nil if the event wasn't mapped to either controller.
- button= string, -- The semi-raw button that was pressed. This is what the button was mapped to by the keymap settings, but without the conversions that occur when OnlyDedicatedMenuButtons is true. Will be empty if the button was not mapped.
- type= string, -- The type of event. "InputEventType_FirstPress", "InputEventType_Repeat", or "InputEventType_Release".
- GameButton= string, -- The cooked button that was pressed. This is button with mapping that occurs when OnlyDedicatedMenuButtons is true applied. This is nil for unmapped buttons.
- PlayerNumber= PlayerNumber, -- The player that the controller is mapped to, or nil.
- MultiPlayer= string, -- Unknown purpose.
- }
-
-
- Returns the name of the next Screen.
-
-
- Returns the name of the previous Screen.
-
-
- Returns the ScreenType for this Screen.
-
-
- Locks input for f
seconds.
-
-
- [02 Other.lua] Gets a metric from the current Screen.
-
-
- Posts a message with the text sScreenMsg
to the Screen after fDelay
seconds.
-
-
- This removes the callback from the list.
-
-
- Sets the NextScreen value to name.
-
-
- Sets the PrevScreen value to name.
-
-
- [02 Other.lua] Gets a string from the current Screen in the current language.
-
-
-
-
- Returns the current .
-
-
-
-
- Returns the current StageStats.
-
-
-
-
- This should behave identically to the normal back button behavior. This function is for the pause menu to use when the player forfeits or restarts, so that a score isn't saved.
-
-
- Returns true
if a single has its NoteField centered.
-
-
- Returns a dummy PlayerInfo for the specified index.
-
-
- Returns the current haste rate. HasteRate * MusicRate is the current total rate the music is multiplied by.
-
-
- Returns the for the specified pn
.
-
-
- Returns the next in the current .
-
-
- Returns the PlayerInfo for player pn
.
-
-
- Returns the current true beats per second for the specified player.
- This takes into account the current music rate and the current haste effect.
- If you are displaying the BPM on ScreenGameplay, this is what you should use to have correct behavior when Haste and/or a music rate mod are in effect.
-
-
- This is part of the system for controlling how haste behaves.
- Read Docs/Themerdocs/haste.txt.
-
-
- This is part of the system for controlling how haste behaves.
- Read Docs/Themerdocs/haste.txt.
-
-
- This is part of the system for controlling how haste behaves.
- Read Docs/Themerdocs/haste.txt.
-
-
- This is part of the system for controlling how haste behaves.
- Read Docs/Themerdocs/haste.txt.
-
-
- Sets the next Screen to be loaded.
-
-
- Returns true
if the game is paused.
-
-
- Pauses or unpauses the game, depending on the value of bPause
.
-
-
-
-
- Returns the LifeMeter.
-
-
-
-
- Adds a screen at the top of the screen stack. (sMessage
is an optional ScreenMessage posted once the new screen is finished.)
-
-
- Gets the screen at the top of the screen stack.
-
-
- Returns whether the input for the player has been redirected away from the normal screen input function. Input that has been redirected is only sent to lua input callbacks.
-
-
- Plays the invalid sound.
-
-
- Plays the start sound.
-
-
- Plays the coin sound.
-
-
- Plays the cancel sound.
-
-
- Plays the screenshot sound.
-
-
- Reloads any loaded overlay screens.
-
-
- Returns true
if screen class s
exists.
-
-
- Returns true
if screen s
is prepared.
-
-
- Sets the next screen to s
.
-
-
- Sets whether the input for the player has been redirected away from the normal screen input function. Input that has been redirected is only sent to lua input callbacks.
- This can be useful when putting a custom menu on a screen, and you want to disable the built in actors while the menu is open. Then you handle input through an input callback until the player closes the menu.
-
-
- Broadcasts a system message.
-
-
-
-
- Returns true
if Player pn
backspaced successfully.
-
-
- Returns true
if Player pn
was able to add sKey
to their name.
-
-
- Attempts to finish Player pn
and returns true
- if successful.
-
-
- Returns true
if anyone is entering their name.
-
-
- Returns true
if anyone is still entering their name.
- (As opposed to those who are Finalized; see )
-
-
- Returns true
if Player pn
is entering their name.
-
-
- Returns true
if Player pn
is finished entering their name.
-
-
- Gets the currently selected letter of Player pn
.
-
-
-
-
- Returns the number of active players.
-
-
-
-
- Returns true
if all active players are on the last options row.
-
-
- Returns true
if the specified player is on an items that ends the screen.
-
-
- Returns the current row that player pn
is on. (Was previously GetCurrentRow
.)
-
-
- Returns the number of rows on the screen.
-
-
- Returns the specified OptionRow.
-
-
-
-
- Returns true
if we are going to PlayerOptions.
-
-
-
-
- Continues to the next screen.
-
-
- Returns true
if there is a profile that can be loaded.
-
-
-
-
- Continues to the next screen.
-
-
- Returns true
if there is a profile that can be saved.
-
-
-
-
- Returns player pn
's current selected item as an integer.
-
-
-
-
- Returns false if the options list is already open or the UseOptionsList metric is false.
-
-
- Returns true
if the player is going to the options screen.
-
-
- Returns the MusicWheel used on this screen.
-
-
- Opens the OptionsList for Player pn
-
-
- [02 StageMods.lua] Sets up modifiers for course modes.
-
-
- [02 StageMods.lua] Sets up modifiers for non-course modes.
-
-
-
-
- Tells the screen to go to the previous screen.
-
-
- Attempts to finish the screen and returns true
- if successful.
-
-
- Returns the profile index of the specified Player.
-
-
- Sets the profile index of Player pn
to iProfileIndex
.
-
-
-
-
- TextEntrySettings is implemented similar to the Attributes in BitmapText. Formatting issues prevent the sample from being properly shown here. Please see docs/Themerdocs/ScreenTextEntry.txt for the TextEntrySettings format.
-
-
- Sets up a ScreenTextEntry's values.
-
-
-
-
- Tells the screen to go to the previous screen.
-
-
- Returns true
if the screen is currently transitioning.
-
-
- Tells the screen to go to play its Out transition, and then posts the ScreenMessage sScreenMsg
. To go to the next screen, use "SM_GoToNextScreen" as the argument.
-
-
- Sets whether the screen allows late joining. This only works for screens that are just ScreenWithMenuElements, as most derived screens have their own hard coded function for whether late joining is allowed.
-
-
-
-
- Returns an array of all the available objects for a .
-
-
- Returns the path to the song's background image.
-
-
- Returns the path to the song's banner.
-
-
- Returns a table with all the data for the song's BGCHANGES line.
- Each element of the table is one change like this:
- {start_beat= 1.0, rate= 1.0, transition= "example", effect= "example", file1= "example", file2= "example", color1= "#FFFFFFFF", color2= "#FFFFFFFF"}
-
-
- Returns the path to the song's CD image.
-
-
- Gets the path to the CDTitle.
-
-
- Returns the path to the song's disc image (different from CD, think Pump).
-
-
- Returns the displayed artist of the song.
-
-
- Returns a table of 2 floats containing the display BPMs.
-
-
- Returns the displayed full title of the song, including subtitle.
-
-
- Returns the displayed main title of the song.
-
-
- Returns the displayed subtitle of the song.
-
-
- Returns the first beat of the song.
-
-
- Returns the first second of the song.
-
-
- Returns the genre of the song.
-
-
- Returns the group name that the song is in.
-
-
- Returns the path to the song's jacket image.
-
-
- Returns the last beat of the song.
-
-
- Returns the last second of the song.
-
-
- Gets the path to the lyrics.
-
-
- GetDisplayMainTitle checks the ShowNativeLanguage pref and returns the transliterated title is that pref is false.
- GetMainTitle (this function) does not check that pref. Instead, it directly returns the title, exactly as it is in the #TITLE field in the simfile.
-
-
- Gets the path to the music file.
-
-
- Returns a Step object if the StepType and Difficulty exist.
-
-
- Gets the Song's origin.
-
-
- Returns the path to the Song's preview music. This handles the #PREVIEW tag internally, so it works with songs that use it and songs that don't.
-
-
- Returns the path to the Song's preview video, if it exists. (Returns nil
otherwise.)
-
-
- Gets the length of a song's sample time in seconds.
-
-
- Gets the starting position of a song sample in seconds.
-
-
- Returns the song's directory.
-
-
- Returns the songfile path.
-
-
- [02 Other.lua] Returns the number of stages this song costs.
-
-
- Returns a table of Steps that have StepsType st
.
-
-
- Returns how long the longest stepchart is in seconds.
-
-
- Returns the song's TimingData.
-
-
- Returns the transliterated artist of the song.
-
-
- Returns the transliterated full title of the song, including subtitle.
-
-
- Returns the transliterated main title of the song.
-
-
- Returns the transliterated subtitle of the song.
-
-
- Returns true
if the song has steps for the specified difficulty in st
.
-
-
- Returns true
if the song has attacks.
-
-
- Returns true
if the song has a background.
-
-
- Returns true
if the song has a banner.
-
-
- Returns true
if the song has BGChanges.
-
-
- Returns true
if the song has a CD image.
-
-
- Returns true
if the song has a CDTitle.
-
-
- Returns true
if the song has a Disc graphic.
-
-
- Returns true
if the song has edits.
-
-
- Returns true
if the song has a jacket graphic.
-
-
- Returns true
if the song has lyrics.
-
-
- Returns true
if the song has music.
-
-
- Returns true
if the song has a preview video.
-
-
- Returns true
if the song has significant BPM changes or stops.
-
-
- Returns true
if the song has the specified StepsType.
-
-
- Returns true
if the song's DisplayBPM is constant.
-
-
- Returns true
if the song's DisplayBPM is random.
-
-
- Returns true
if the song's DisplayBPM is secret.
-
-
- Returns true
if the song is considered easy.
-
-
- Returns true
if the song is enabled.
-
-
- Returns true
if the song meets the criteria for a "Long Version".
-
-
- Returns true
if the song meets the criteria for "Marathon" length.
-
-
- Returns true
if the song and the specified steps have different timing.
-
-
- Returns true
if the song only has Beginner steps.
-
-
- Returns the length of the song in seconds.
-
-
- Returns true
if the song is normally displayed.
-
-
- Returns true
if the song is shown in Demonstration and Ranking.
-
-
-
-
- Returns true
if the specified course group exists.
-
-
- Returns true
if the specified song group exists.
-
-
- Returns a Course if one matching sCourse
is found.
-
-
- Returns a Song if one matching sSong
is found.
-
-
- Returns an array of all the installed courses.
-
-
- Returns an array of all the installed songs.
-
-
- Returns the course color of Course c
.
-
-
- Returns the path to the specified course group's banner.
-
-
- Returns a table containing all of the course group names.
-
-
- Returns a table with all of the courses in the specified group.
-
-
- Returns the extra stage info (Song, Steps) for the specified Style s
. (If bExtra2
is true, it will use the second Extra Stage data instead of the first. Again, Lua.xsd sucks)
-
-
- Returns the number of courses loaded via Additional folders.
-
-
- Returns the number of songs loaded via Additional folders.
-
-
- Returns the number of course groups.
-
-
- Returns the number of courses.
-
-
- Returns the number of selectable and unlocked songs.
-
-
- Returns the number of song groups.
-
-
- Returns the number of songs.
-
-
- Returns the number of locked songs, regardless of reason for locking.
-
-
- Returns the number of unlocked songs.
-
-
- Returns a table of popular courses for the specified CourseType.
-
-
- Returns a table of popular songs.
-
-
- Returns a table of courses as they'd appear in preferred sort.
-
-
- Returns a table of songs as they'd appear in preferred sort.
-
-
- Returns a random course.
-
-
- Returns a random song.
-
-
- Returns the song color of Song s
.
-
-
- Returns a Song given a set of Steps st
.
-
-
- Returns the path to the specified song group's banner.
-
-
- Returns the song group color of sGroupName
.
-
-
- Returns a table containing all of the song group names.
-
-
- Returns the rank (popularity) of Song s
.
-
-
- Returns a table containing all of the songs in group sGroupName
.
-
-
- Returns the shortened group name (based on entries in Translations.xml).
-
-
- Loads preferred courses from {theme}/Other/SongManager sListName.txt
.
-
-
- Loads preferred songs from {theme}/Other/SongManager sListName.txt
.
-
-
- Returns the preferred sort section name for the specified Song.
-
-
- Returns true
if the specified course was loaded from AdditionalCourses.
-
-
- Returns true
if the specified song was loaded from AdditionalSongs.
-
-
-
-
- See the description for PlayerOptions. The functions follow the same design.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Limited to the range 0 < rate <= 3 because speeds greater than 3 are likely to crash.
-
-
- A multiplier for the haste system. Limited to the range -1 to 1.
-
-
-
-
- Returns the current beats per second.
-
-
- Returns true
if a Delay is active.
-
-
- Returns true
if a Freeze is active.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Returns the row where a warp appears.
-
-
- Returns the warp destination length.
-
-
-
-
- Returns the length of the animation in seconds.
-
-
- Gets whether the Sprite should call the decode function for its texture during updates.
-
-
- Return the number of states this Sprite has.
-
-
- Returns the Sprite's current state (frame number in a multi-frame sprite).
-
-
- Returns the Sprite's texture.
-
-
- [02 Sprite.lua] Returns a Frames
table consisting of iNumFrames
frames lasting for a total of fSeconds
seconds. This function is not a member function and should be used as Frames = Sprite.LinearFrames( 5, 2.6 )
.
-
-
- If sPath
is nil
, then unload the texture. Otherwise, load the texture at path sPath
.
-
-
- Load the song background texture at sPath
.
-
-
- Load the song banner texture at sPath
.
-
-
- [02 Sprite.lua] Loads the background from the current Song or the first Trail entry.
-
-
- [02 Sprite.lua] Load the texture for song
's background.
-
-
- [02 Sprite.lua] Load the texture for song
's banner.
-
-
- Sets the custom image rectangle. (Works in image pixel space.)
-
-
- Sets custom offsets for the corners of the Sprite. Coordinates are paired,
- corner order is upper left, lower left, lower right, upper right.
-
-
- Turns off the custom pos coords for the sprite.
-
-
- Sets whether the Sprite should call the decode function for its texture during updates.
-
-
- Set the to mode
.
-
-
- Sets the number of seconds into the animation to fSeconds
.
-
-
- Sets the properties of the states of the sprite. The properties table is identical to the "Frames" table that can be put in the sprite when calling Def.Sprite.
- Example:
- {{Frame= 0, Delay= .016, {0, 0}, {.25, .25}},
- {Frame= 1, Delay= .016, {0, 0}, {.25, .25}},
- {Frame= 2, Delay= .016, {0, 0}, {.25, .25}},
- {Frame= 3, Delay= .016, {0, 0}, {.25, .25}},
- }
- Frame is optional, defaulting to 0.
- Delay is optional, defaulting to 0.
- The two tables are optional upper left and lower right corners of the fraction of the frame to use. The example makes the sprite only use the upper left corner of each frame.
- Simpler example:
- {{Frame= 0, Delay= .016}, {Frame= 1, Delay= .016}, {Frame= 2, Delay= .016}, {Frame= 3, Delay= .016}}
- This example makes the sprite use the whole of each frame.
-
-
- Set the texture to texture
.
-
-
-
-
-
- Allows the themer to set a custom texture rectangle that effects the way the texture is drawn.
-
-
- Returns true if the sprite is using the effect clock for texcoordvelocity.
-
-
- [02 Sprite.lua] Call RageTexture:loop
( bLoop )
on the texture.
-
-
- [02 Sprite.lua] Call RageTexture:position
( fPos )
on the texture.
-
-
- [02 Sprite.lua] Call RageTexture:rate
( fRate )
on the texture.
-
-
- Scale the Sprite to width fWidth
and height fHeight
clipping if the dimensions do not match.
-
-
- Set the Sprite's state to iNewState
.
-
-
- If use
is true, then the sprite will use the effect clock for texcoordvelocity.
-
-
-
-
-
- Set the texture coordinate velocity which controls how the Sprite changes as it animates. A velocity of 1 makes the texture scroll all the way once per second.
-
-
-
- Crops the Sprite to fWidth
xfHeight
.
-
-
- [01 alias.lua] Alias for CropTo.
-
-
- Sets all the state delays to fRate
. Useful for Sprites that need to change by BPM (e.g. Tran from DDR 5th Mix, the cube from DS EuroMix 2).
-
-
-
-
- Returns true
if everyone failed.
-
-
- Returns the EarnedExtraStage value.
-
-
- Returns the number of seconds played.
-
-
- Returns the PlayerStageStats of multiplayer mp
.
-
-
-
- Returns the PlayerStageStats of player pn
.
-
-
-
- Returns the Stage value.
-
-
- Returns the stage index.
-
-
- Returns true
if at least one person passed.
-
-
- Returns true
if player pn
has a high score.
-
-
-
-
- Returns the accumulated played StageStats.
-
-
- Returns the best final grade.
-
-
- Returns the best grade.
-
-
- Returns the current StageStats.
-
-
- Returns player pn
's final grade.
-
-
- Get the StageStats from iAgo
rounds ago.
-
-
- Returns the number of stages played.
-
-
- Returns the worst grade.
-
-
- Resets the stats.
-
-
-
-
- Returns the author that made that particular Steps pattern.
-
-
- Returns the Steps chart name.
-
-
- Returns the Chart Style for this Steps.
-
-
- Returns the Steps description.
-
-
- Returns the Steps difficulty.
-
-
- Returns a table with the minimum and maximum values from the DisplayBPM.
-
-
- Returns the DisplayBPM type.
-
-
- Returns the Steps filename from the Cache.
-
-
- Returns a hash of the Steps.
-
-
- Returns the numerical difficulty of the Steps.
-
-
- Returns true
if the Steps has any attacks.
-
-
- Returns true
if the Steps pattern has significant timing changes.
-
-
- Returns the complete list of RadarValues for player pn
. Use to grab a specific value.
-
-
- Returns the Steps type.
-
-
- Returns the TimingData for the Steps.
-
-
- Returns true
if the Steps are an edit.
-
-
- Returns true
if the Steps are a player edit (loaded from a profile).
-
-
- Returns true
if the steps were automatically generated.
-
-
- Returns true
if the DisplayBPM is constant.
-
-
- Returns true
if the DisplayBPM is random.
-
-
- Returns true
if the DisplayBPM is secret.
-
-
- Returns the predicted meter for this Step.
-
-
- Returns true
if the Steps use different TimingData
from the Song.
-
-
-
-
- Loads the StepsDisplay commands from the Metrics in group sMetricsGroup
.
-
-
- Sets the StepsDisplay from the GameState using Player pn
.
-
-
- Sets the StepsDisplay based on Steps pSteps
.
-
-
- Sets the StepsDisplay based on the passed in StepsType, iMeter
, and Difficulty.
-
-
- Sets the StepsDisplay based on Trail pTrail
.
-
-
-
-
- Returns the number of total tracks per player this Style contains (e.g. 4 for dance-versus, but 8 for dance-double).
-
-
- Returns the name of the Style.
-
-
- Returns the StepsType for this Style.
-
-
- Returns the StyleType for this Style.
-
-
- Returns a table containing the Track, XOffset, and Name of the column.
-
-
- Returns the draw order of the column.
-
-
- Returns the width of the notefield for the given player with this style.
-
-
- Returns true
if this style locks the difficulty for both players.
-
-
- Deprecated. Always returns false.
-
-
-
-
- Returns the of the Tap Note.
-
-
- Returns the of the Tap Note.
-
-
- Returns the of the Tap Note.
-
-
- Returns the of the Tap Note.
-
-
- Returns the of the Tap Note. Relevant for routine steps.
-
-
- Returns the Attack Modifiers of the Tap Note.
-
-
- Returns the Attack Duration of the Tap Note in seconds.
-
-
- Returns the Keysound Index of the Tap Note.
-
-
- Returns the Hold Duration of the Tap Note in beats.
-
-
- Returns the of the Tap Note.
-
-
-
-
- Returns the of the Tap Note.
-
-
- Returns the TapNotOffset of the Tap Note.
-
-
- Returns true if the Tap Note was judged with a result that would stop it from drawing.
-
-
-
-
- Returns the of the Hold Note.
-
-
- Returns the life of the Hold Note.
-
-
- Returns the amount of time the hold has overlapped the target.
-
-
- Returns the last beat the Hold Note was held.
-
-
- Returns the number of checkpoints hit.
-
-
- Returns the number of checkpoints missed.
-
-
- Returns true if the note was initiated and is being held.
-
-
- Returns true if the note was initiated.
-
-
-
-
- Loads the TextBanner from the specified metrics group.
-
-
- Loads the TextBanner's child elements from a .
-
-
- Loads the TextBanner's child elements from strings.
-
-
-
-
- Returns true
if the specified language exists in the current theme.
-
-
- Returns true
if the specified theme exists.
-
-
- [02 Utilities.lua] Returns the absolute path of a file in the theme.
-
-
- Returns the current language.
-
-
- Returns the theme's current directory.
-
-
- Returns the name of the current theme.
-
-
- Returns the value of Element
in Class
from metrics.ini.
-
-
- Returns the names of all elements in Class
from metrics.ini.
-
-
- Returns the number of selectable themes.
-
-
- Returns the path of ClassName Element
in the BGAnimations folder.
-
-
- Returns the path of an element in the Fonts folder.
-
-
- Returns the path of an element in the Graphics folder.
-
-
- returns three strings: BGAnimation ResolvedPath, MatchingMetricsGroup, MatchingElement. Used in LoadFallbackB in themes/_fallback/02 Other.lua. (Lua.xsd sucks)
-
-
- Returns the path of an element in the Other folder.
-
-
- Returns the path of an element in the Sounds folder.
-
-
- Returns a table of selectable theme directories.
-
-
- Returns the value of Element
in Class
for the currently loaded language.
-
-
- Returns the names of all elements in Class
for the currently loaded language.
-
-
- Returns the author of the current theme or "[unknown author]".
-
-
- Returns the display name of the current theme.
-
-
- Returns true
if the theme has the specified metric.
-
-
- Returns true
if the theme has the specified string.
-
-
- Returns true
if the specified theme is selectable.
-
-
- Reloads the current theme's metrics.
-
-
-
-
-
- Changes the current theme.
- After the theme changes, the screen specified by the Common::AfterThemeChangeScreen metric will be loaded.
- The Common::InitialScreen metric will be used if Common::AfterThemeChangeScreen is blank or invalid.
-
-
-
-
- GetBPMsAndTimes, GetStops, GetDelays, GetLabels, GetWarps, GetCombos, GetTimeSignatures, GetTickcounts, GetFakes, GetScrolls, and GetSpeeds all have two different modes.
- If false (or nothing) is the argument to these functions, they return tables of strings. The strings are numbers separated by '='.
- If the argument is true, they return tables of tables, and the inner tables contain numbers as described for each function.
- The first form is kept around and is the default for compatibility with older themes. The advantage of the second form is that you no longer need to have a bit of code in your theme to transform the string into a table of numbers before you can use it.
- Example:
- local bpmsand= timing_data:GetBPMsAndTimes()
- for i, s in ipairs(bpmsand) do
- local sand= split("=", s)
- bpmsand[i]= {tonumber(sand[1]), tonumber(sand[2])}
- end
- -- do something that looks at all the bpms and times.
- Becomes:
- local bpmsand= timing_data:GetBPMsAndTimes(true)
- -- do something that looks at all the bpms and times.
-
-
- Returns the minimum and maximum BPM of the song in a table (in that order).
-
-
- Returns the beat from fElapsedTime
.
-
-
- Returns the BPM at fBeat
.
-
-
- Returns a table of the BPMs as floats.
-
-
- Returns a table of the BPMs and the times they happen as tables. The first value is the beat. The second value is the bpm.
-
-
- Returns the elapsed time from fBeat
.
-
-
- Returns a table of the Stops and the times they happen as tables. The first value is the beat. The second value is the length.
-
-
- Returns a table of the Delays and the times they happen as tables. The first value is the beat. The second value is the length.
-
-
- Returns a table of the Labels and the times they happen as tables. The first value is the beat. The second value is the label.
-
-
- Returns a table of the Warps and the times they happen as tables. The first value is the beat. The second value is the number of beats to warp over.
-
-
- Returns a table of the Combos and the times they happen as tables. The first value is the beat. The second value is the combo. The third value is the miss combo.
-
-
- Returns a table of the Time Signatures and the times they happen as tables. The first value is the beat. The second value is the numerator. The third value is the denominator.
-
-
- Returns a table of the Tickcounts and the times they happen as tables. The first value is the beat. The second value is the number of ticks per beat.
-
-
- Returns a table of the Fakes and the times they happen as tables. The first value is the beat. The second value is the number of beats to not judge.
-
-
- Returns a table of the Scrolls and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio.
-
-
- Returns a table of the Speeds and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio. The third value is the length of time to fully activate. The fourth value is the unit of activation (0 for beats, 1 for seconds).
-
-
- Returns true
if the TimingData contains BPM changes.
-
-
- Returns true
if the TimingData contains delays.
-
-
- Returns true
if the TimingData contains any BPM changes with a negative BPM.
-
-
- Returns true
if the TimingData contains stops.
-
-
- Returns true
if the TimingData contains warps.
-
-
- returns true
if the TimingData contains fake segments.
-
-
- Returns true
if the TimingData contains speed scrolling changes.
-
-
- Returns true
if the TimingData contains general scrolling changes.
-
-
-
-
- Returns true
if song s
is in the Trail.
-
-
- Returns an array with all the artists in the Trail.
-
-
- Returns the Trail's difficulty.
-
-
- Returns the length of this Trail in seconds.
-
-
- Returns a table of TrailEntry items.
-
-
- Returns the Trail's difficulty rating.
-
-
- Returns the Trail's RadarValues.
-
-
- Returns the Trail's StepsType.
-
-
- Returns the Trail's total meter
-
-
- Returns the TrailEntry at index iEntry
.
-
-
- Returns true
if any of the Trail entries are secret.
-
-
-
-
- Returns a string of modifiers used in this TrailEntry.
-
-
- Returns the Song used in this TrailEntry.
-
-
- Returns the Steps used in this TrailEntry.
-
-
- (why'd I think this was a good idea when we have ?)
-
-
-
-
- Sets the UnlockEntry's ID to m_sEntryID
.
-
-
- Sets the UnlockEntry's course to sCourseName
.
- Example: course,"Driven"
-
-
- Returns the code for this unlock.
-
-
- Returns the Course for this unlock.
-
-
- Returns the unlock description.
-
-
- Returns the UnlockRequirement.
-
-
- Returns true
if the UnlockEntry requires you to pass Hard steps.
-
-
- Returns true
if the UnlockEntry requires you to pass Challenge steps.
-
-
- Returns the Song related to the UnlockEntry.
-
-
- Get all of the steps locked based on StepsType.
-
-
- Get all of the steps locked based on difficulty.
-
-
- Returns the UnlockRewardType for this entry.
-
-
- Returns true
if the UnlockEntry is locked.
-
-
- Sets the UnlockEntry's modifier to sModifier
.
-
-
- Sets the requirement for this unlock to m_fRequirement
.
-
-
- Makes the UnlockEntry require passing Hard steps.
-
-
- Makes the UnlockEntry require passing Challenge steps.
-
-
- Makes the UnlockEntry hide in Roulette.
-
-
- Sets the UnlockEntry's song to sSongName
. sSongName
also requires the group.
- Example: song,"In The Groove/Pandemonium"
-
-
- Sets the UnlockEntry to unlock a specified song's steps.
- Example: steps,"In The Groove/Pandemonium","expert"
-
-
- Sets the UnlockEntry to unlock a specified song's stepstype.
-
-
-
-
- Returns true
if there are any unlocks to celebrate.
-
-
- Returns the associated EntryID.
-
-
- Returns the number of unlocked items.
-
-
- Returns the number of all unlock items, regardless of status.
-
-
- Returns the number of points for the machine profile based on the specified UnlockRequirement.
-
-
- Returns the number of points for the specified profile based on the specified UnlockRequirement.
-
-
- Returns the number of points until the next unlock.
-
-
- Returns a table of songs unlocked by UnlockEntry sEntryID
.
-
-
- Returns a table of steps unlocked by UnlockEntry sEntryID
.
-
-
- Returns the UnlockEntry at iIndex
.
-
-
- Returns the UnlockEntry index to celebrate.
-
-
- Sets the preferred Song/Course to the specified sUnlockEntryID
-
-
- Unlocks an entry by ID.
-
-
- Unlocks an entry by index.
-
-
- Determines if a song is locked by any means. The number returned determines
- how the song is locked.
-
-
-
-
- Returns the wheel's current index.
-
-
- Returns the total number of items in the wheel.
-
-
- Returns the WheelItemDataType of the selected item.
-
-
- Returns the WheelItem at index iIndex
.
-
-
- Returns true
if the wheel is locked.
-
-
- Returns true
if the wheel is settled/stopped moving.
-
-
- Moves the wheel by n
.
-
-
- Attempts to set the open section to sSection
.
-
-
-
-
- Returns the color of this wheel item.
-
-
- Returns the text of this wheel item.
-
-
- Returns the type of this wheel item.
-
-
- Returns whether the wheel item has been loaded yet. If this function returns false, calling any other WheelItemBase function will result in an error.
- A specific case where this is known to happen is commands that trigger on CurrentSongChanged because the music wheel clears the current song before it finishes loading if the current song is longer than the number of stages remaining.
-
-
-
-
- Sets the WorkoutGraph from the current Workout.
-
-
- Sets the WorkoutGraph from GameState and song index iSongIndex
.
-
-
-
-
-
-
-
- Blending modes. See .
-
-
-
-
- Horizontal alignment. See .
-
-
-
-
- Vertical alignment. See .
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ [02 Colors.lua] Returns a color
with the specified alpha.
+
+
+ Use this to make a current value approach a goal value at the given speed. Speed must not be negative. The value will not overshoot the goal.
+ Note: When you see the error "approach: speed 1 is negative." it means that the speed value passed was negative. The 1 is there because approach and multiapproach use the same internal function and can be ignored when using approach.
+
+
+ [03 CustomSpeedMods.lua]
+
+
+ [02 StageMods.lua]
+
+
+ [02 StageMods.lua]
+
+
+ Issues an error when v
is false
(or nil
). Returns all arguments otherwise. sAssertMessage
is an optional error message (the default is "assertion failed!").
+
+
+ Returns the base name of file path.
+
+
+ [02 Colors.lua] Boosts the specified color by multiplying its values by fBoost
.
+
+
+ [02 Colors.lua] Modifies the brightness of the specified color.
+
+
+ [02 Utilities.lua] Returns true
if Center 1P is being used.
+
+
+ [03 Gameplay.lua] Returns true
if checkpoint judgments and tap judgments
+ are considered separate, or false
otherwise.
+
+
+ CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s.
+ Erm, I mean... Clamps fValue
between fLow
and fHigh
.
+
+
+ [04 KeymapGuard.lua]
+
+
+ Closes any connection to an online server.
+
+
+ A generic interface to Lua's garbage collector. Performs different functions based on the value of opt
.
+
+
+ Returns a color from a string. color
can be in hex ("#FFFFFFFF"
) or 0..1 values ("1.0,1.0,1.0,1.0"
), in RGBA order.
+
+
+ [02 Colors.lua] Returns a darker tone of the color. (Specifically c[1]/2, c[2]/2, c[3]/2, c[4]
)
+
+
+ [02 Colors.lua] Returns a lighter tone of the color. (Specifically c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4]
)
+
+
+ [02 Colors.lua] Returns a midtone of the color. (Specifically c[1]/1.5, c[2]/1.5, c[3]/1.5, c[4]
)
+
+
+ [02 Colors.lua] Returns a hex representation for the specified color.
+
+
+ [02 Colors.lua] Takes in a color and returns a table with the HSV values.
+
+
+ [03 Gameplay.lua] Determines what TapNoteScore allows for continuing the combo.
+
+
+ [03 Gameplay.lua] Determines what TapNoteScore allows for maintaining the combo.
+
+
+ [03 Gameplay.lua] Determines if combo should be per row (Jump = 1) or per column (Jump = 2).
+
+
+ [02 Other.lua] The combo trasform command.
+
+
+ [03 Gameplay.lua] Returns the UserPrefComboUnderField
user preference value.
+
+
+ This will take the number and insert a comma every three digits, as normal in English for writing large numbers.
+ number
can be a string, an integer, or a float.
+ comma
is an optional argument that is used instead of a comma.
+ "commify(1234, 'cat')" will result in "1cat234".
+ dot
is an optional argument that is used instead of a dot to find the end of the part that should be commified.
+ "commify('1234cat5678', ',', 'cat')" will result in "1,234cat5678", but "commify('1234cat5678')" will result in "12,34c,at5,678".
+ The comma
and dot
arguments are provided to ease compliance with locales or languages that do not use comma and dot in numbers the way English does.
+
+
+ Tries to connect to the server at sAddress
.
+
+
+ Recursively searches dir
for xml files of actors and
+ converts them to equivalent lua files. See Docs/Themerdocs/XmlToLua.txt
+ for details.
+
+
+ Creates a RageBezier2D for you to use. Make sure you destroy the RageBezier2D when you're done with it, or you will have a memory leak.
+
+
+ Creates a CubicSplineN for you to use. Make sure you destroy the CubicSplineN when you're done with it, or you will have a memory leak.
+
+
+ [02 Colors.lua]
+
+
+ [02 Colors.lua]
+
+
+ [02 Colors.lua]
+
+
+ Returns the current day of the month.
+
+
+ Returns the current day of the year.
+
+
+ [02 Serialize] Recursively deep-copy a table.
+
+
+ [01 base.lua] "Override Lua's dofile to use our loadfile."
+
+
+ [03 Gameplay.lua]
+
+
+ [03 Gameplay.lua]
+
+
+ [02 Utilities.lua] Old name for approach.
+
+
+ This function creates files in the theme's Languages folder listing all the strings that have no translation and all the strings that are unused.
+ Strings that do not have an entry in the master language are considered unused.
+ master_lang_name is the name of the ini file that contains the language with all strings used by the theme.
+ Example: find_missing_strings_in_theme_translations("my_best_theme", "en.ini")
+
+
+ [02 Utilities.lua] Return the index of a true value in list
.
+
+
+ [02 Utilities.lua] Find a key in tab
with the given value
.
+
+
+ func
takes a key and a value.
+
+
+ Returns the number passed to the function followed by its suffix ("th", "nd", and so on).
+
+
+
+ Returns fPercentDancePoints
formatted as a percentage.
+
+
+ [03 Gameplay.lua] Returns a list of valid styles for the current gametype.
+
+
+ [03 Gameplay.lua]
+
+
+ Returns the corresponding CustomDifficulty string for a StepsType/Difficulty (/optional CourseType) combination.
+
+
+ [04 Scoring.lua] "Get the radar values directly. The individual steps aren't used much."
+
+
+ [02 Other.lua] Returns a string with the Edit Mode SubScreens.
+
+
+ [03 EnvUtils2.lua] Returns the value of name
from the Env table.
+
+
+ [03 Gameplay.lua] Returns the number at which the Extra color should be used.
+
+
+ Returns a corresponding for the given percentage.
+
+
+ Returns the current Life Difficulty.
+
+
+ Returns the length of the music file found at path.
+ If you are loading the sound into an ActorSound, ActorSound:get to get its RageSound then use RageSound's get_length function instead to avoid loading the file twice.
+
+
+ Returns a table of the names of the sound drivers available. If the SoundDriver preference is set to something that is not in this list, StepMania WILL NOT START UP. Changes to the SoundDriver preference do not take effect until the next time StepMania starts up.
+
+
+ Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown")
+
+
+ [02 Utilities.lua] "This returns a profile, preferably a player one. If there isn't one, [it falls] back on the machine profile."
+
+
+ [03 ThemePrefs.lua] Returns true
if player pn
is using ProTiming.
+
+
+ [02 Utilities.lua] Returns a path to a random song background.
+
+
+ [02 Actor.lua]
+
+
+ [02 Actor.lua]
+
+
+ Returns the display aspect ratio.
+
+
+ Returns the name of the currently connected server.
+
+
+ [02 Utilities.lua] Returns a path to the current songs background.
+
+
+ [03 Gameplay.lua]
+
+
+ Returns the theme's aspect ratio.
+
+
+ [03 ThemePrefs.lua] (Alias for .)
+
+
+ Returns the current Timing difficulty.
+
+
+ Returns the current time since the program was started. Includes time that was spent loading songs.
+
+
+ [01 alias.lua]
+
+
+ [01 alias.lua]
+
+
+ [04 Scoring.lua] "Retrieve the amount of taps/holds/rolls involved." Used in some scoring formulas.
+
+
+ [03 UserPreferences2.lua] Themer-facing function for getting a user preference.
+
+
+ [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a boolean.
+
+
+ [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a color.
+
+
+ [03 UserPreferences2.lua] Themer-facing function for getting a user preference as a number.
+
+
+ [02 Colors.lua] Returns the color's alpha if it has any, otherwise returns 1.
+
+
+ [03 Gameplay.lua] Returns the value to start showing the combo at.
+
+
+ [03 Gameplay.lua] Returns true
if you need to step on hold heads to activate them.
+
+
+ [03 Gameplay.lua] Returns 0 in pump
mode, TimingWindowSecondsHold
preference value in any other game mode.
+
+
+ Returns the current hour.
+
+
+ [02 Colors.lua] Converts a color from HSV values to something StepMania can understand.
+ hue is from 0-360
, saturation and value are 0..1
+
+
+ [02 Colors.lua] Converts a color from HSV values with alpha to something StepMania can understand.
+ hue is from 0-360
, saturation, value, and alpha are 0..1
+
+
+ [02 Colors.lua] "Converts a set of HSV values to a color."
+
+
+ [02 Colors.lua] "Takes in a normal color and returns the hex representation. (Adapted from code in LuaBit)"
+
+
+ [02 Colors.lua] Changes the hue of the input color.
+
+
+ [03 ThemePrefs.lua] Initializes various user preferences.
+
+
+ [01 base.lua] "Like ipairs(), but returns only values."
+
+
+ [02 Utilities.lua] Returns true
if the coin mode is not set to CoinMode_Home.
+
+
+ Returns true
if Event Mode is turned on.
+
+
+ [02 Utilities.lua] Returns true
if Arcade and the coin mode is CoinMode_Free.
+
+
+ [03 Gameplay.lua] Returns true
if the current game is sGame
.
+
+
+ [02 Utilities.lua] Returns true
if the coin mode is set to CoinMode_Home.
+
+
+ Returns true
if connected to the Internet.
+
+
+ Returns true
if connected to StepMania Online.
+
+
+ Returns true
if Player pn
is logged on to a SMOnline server.
+
+
+ [04 Scoring.lua] Returns true
if W1 is allowed (and tns == 'TapNoteScore_W2'
)
+
+
+ [02 Branches.lua] Returns true
if Routine mode is being played.
+
+
+ [04 WidescreenHelpers.lua] Returns true
if the aspect ratio is 16:10 (1.6
) or higher.
+
+
+ [01 base.lua] "Like ipairs(), but returns only values."
+
+
+ [02 Utilities.lua] Joins a table, splitting each item with delimiter
, returning a string of the results.
+
+
+ [02 Colors.lua]
+
+
+ [02 Colors.lua]
+
+
+ Returns a number linearly interpolated between start and end by percent.
+
+
+ Same as lerp, but for colors. All channels will reach the end of the interpolation at the same time.
+
+
+ Returns an Actor definition for the actor at sPath
. If sPath
points to a Lua file, any additional arguments will be passed to that script.
+
+
+ [02 ActorDef.lua] Loads an actor template. This is the actual core of LoadActor.
+
+
+ [02 ActorDef.lua] Loads an actor with params.
+
+
+ [01 base.lua] "Override Lua's loadfile to use lua.ReadFile."
+
+
+ [02 ActorDef.lua] Load the fallback BGA for the element that is currently being loaded.
+
+
+ [02 ActorDef.lua] Loads a font.
+
+
+ [02 Sprite.lua] Returns a Sprite with the current song's background.
+
+
+ Returns the length of the multi-byte character string sString
.
+
+
+ Returns the current Minute.
+
+
+ [03 Gameplay.lua] Returns the value to start showing the miss combo at.
+
+
+ Creates a module. See the Lua manual for more details.
+
+
+ Returns the current month of the year (0
-11
).
+
+
+ Returns Month m
as a localized string.
+
+
+ Returns Month m
as a string.
+
+
+ Similar to approach, but operates on tables of values instead of single values. This will modify the contents of currents
in place, as well as returning currents
.
+ currents
, goals
, and speeds
must all be the same size and contain only numbers.
+ multiplier
is optional. The speeds in the speeds table will be multiplied by multiplier
. This makes it more convenient to use multiapproach in a per-frame update: pass in the frame delta and the speeds will be scaled to the time that passed.
+ Note: When you see the error "approach: speed 1 is negative." it means that a speed value passed was negative. The 1 tells you which entry in the table was invalid.
+
+
+ "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.
+ next
returns the next index of the table and its associated value."
+ See the Lua manual for more details.
+
+
+ Converts a string such as 'oni' or 'expert' or 'trick' to the appropriate difficulty.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
+
+
+ "Returns three values: the function, the table t
, and nil
,
+ so that the construction for k,v in pairs(t) do body end
+ will iterate over all key–value pairs of table t
."
+
+
+ [02 Colors.lua]
+
+
+ [02 Colors.lua]
+
+
+ [02 Utilities.lua] Converts a PlayerNumber into a short string (e.g. "P1", "P2").
+
+
+ [02 Actor.lua] Returns either p1val
or p2val
depending on pn
.
+
+
+ Returns a formatted percent with the specified num
erator and den
ominator.
+
+
+ [00 init.lua]
+
+
+ [03 ThemePrefs.lua] Prints a table's contents to the log.
+
+
+ Returns the product family. (e.g. "StepMania")
+
+
+ Returns the product ID. (e.g. "StepMania 5")
+
+
+ Returns the product version.
+
+
+ "Checks whether v1
is equal to v2
, without invoking any metamethod."
+
+
+ "Gets the real value of t[index]
, without invoking any metamethod."
+
+
+ "Sets the real value of t[index]
to value
, without invoking any metamethod."
+ The modified t
is then returned.
+
+
+ [02 ActorDef.lua] Used internally by LoadActor to resolve a path. If optional
is true, then a nil path is returned instead of emitting an error if no file is found.
+
+
+ [04 FileUtils.lua] Reads the file at path
and returns its contents.
+
+
+ [03 UserPreferences2.lua] (internal) Reads the specified user preference from its config file.
+
+
+ Recursively prints all the children of the actor frame to the log file. This can be useful for finding out what actors are on a screen or just seeing what the structure of the actor tree looks like.
+ indent
is an optional argument that will be prepended to every line.
+
+
+ Recursively prints all values in the table to the log file in the form "(key_type) key: (value_type) value" so that you know the type of the key and the value. Useful if you're not sure exactly what is in a table passed as a parameter.
+ indent
is an optional argument that will be prepended to every line.
+
+
+ Sends the current style to the server.
+
+
+ Loads the specified module. See the Lua manual for more information.
+
+
+ [02 Utilities.lua] Round a number.
+
+
+ [03 Gameplay.lua] Returns the routine noteskin for player .
+
+
+ [03 Gameplay.lua] Returns the routine noteskin for player 2.
+
+
+ [02 Colors.lua] Modifies the saturation of the specified color
+
+
+ Saves a screenshot. If pn is nil, saves to the machine's Screenshots dir, otherwise saves to the profile's Screenshots dir. Saves as jpg if compress is true, or png if compress is false. The screenshot is signed if sign is true. prefix and suffix are optional strings to add to the beginning and end of the filename.
+ Returns success and full path of the resulting screenshot.
+
+
+ Scales x
, originally within low1
and high1
, to fall between low2
and high2
.
+
+
+ [03 Gameplay.lua] Returns the primary ScoreKeeper class to use.
+
+
+ [00 alias.lua, 02 Other.lua] alias for .
+
+
+ [00 alias.lua, 02 Other.lua] alias for .
+
+
+ Returns the current second.
+
+
+ Converts fSecs
to Minutes:Seconds:Milliseconds format using two digits for each section.
+
+
+ Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section except Minutes (uses 1).
+
+
+ Converts fSecs
to Minutes:Seconds format.
+
+
+ Converts fSecs
to Minutes:Seconds.Milliseconds format.
+
+
+ Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section.
+
+
+ Converts fSecs
to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3).
+
+
+ "If index
is a number, returns all arguments after argument
+ number index
. Otherwise, index
must be the string
+ "#"
, and [it] returns the total number of extra arguments it received."
+
+
+ [02 Branches.lua] Determines the correct music/course selection screen to use and returns it.
+
+
+ [03 Gameplay.lua] (soon to be deprecated) Returns a list of codes to use on ScreenSelectProfile.
+
+
+ [02 Serialize.lua] Serialize the table t
.
+
+
+ [03 EnvUtils2.lua] Sets the value of name
to value
in the Env table.
+
+
+ [03 UserPreferences2.lua] Themer-facing function for setting a user preference.
+
+
+ [03 Gameplay.lua]
+
+
+ [02 ActorDef.lua] Returns true
if a decoration should be shown on the current screen or not.
+
+
+ [03 CustomSpeedMods.lua] Returns a Lua option row with the custom speed mods defined in SpeedMods.txt.
+
+
+ [02 Utilities.lua] Splits a string at every occurence of delimiter
, returning a table of the results.
+
+
+ [02 Colors.lua]
+
+
+ [02 Colors.lua]
+
+
+ [02 ActorDef.lua]
+
+
+ [02 ActorDef.lua]
+
+
+ [02 ActorDef.lua]
+
+
+ [02 Utilities.lua] Returns a shuffled version of t
.
+
+
+ [02 Utilities.lua] Returns a slice of the specified table of size num
.
+
+
+ [02 Utilities.lua] Look up each value in a table, returning a table with the resulting strings.
+
+
+ [02 TextBanner.lua] This function defines how the TextBanner is laid out.
+
+
+ [02 Utilities.lua] Converts a string or number to a bool.
+
+
+ Tries to convert e
to a number. Returns nil
if
+ it can't convert the input to a number. (base
is optional.)
+
+
+ Converts e
to a string.
+
+
+ [02 Enum.lua] Returns a string representing an enum starting from '_'. For example, passing PlayerNumber_P1 to this function will return P1
.
+
+
+ [00 init.lua] Alias for .
+
+
+ Returns the type of the object as a string. See the Lua manual for valid return values.
+
+
+ "Returns the elements from the given table.
+ This function is equivalent to return list[i], list[i+1], ···, list[j]
"
+ (i
and j
are optional; "by default, i is 1 and j is the length of the list.")
+
+
+ Returns a string with characters escaped for URLs. (e.g. a space becomes '%20')
+
+
+ This tells Stepmania to update the screen position for any changes to these preferences: CenterImageAddWidth, CenterImageAddHeight, CenterImageTranslateX, CenterImageTranslateY.
+ This way, a theme can implement a custom interactive screen for adjusting those preferences.
+
+
+ [01 base.lua] Alias for lua.GetThreadVariable.
+
+
+ Returns the current version's build date.
+
+
+ Returns the current version's build time.
+
+
+ [00 init.lua] Alias for .
+
+
+ [04 WidescreenHelpers.lua] Depending on the screen width, scales between ar43
(4:3; 640px) and ar169
(16:9; 854px).
+
+
+ [02 Utilities.lua]
+
+
+ [02 ActorDef.lua] Wraps the children in an ActorFrame.
+
+
+ [04 FileUtils.lua] Writes buf
to the file at path
.
+
+
+ [03 GamePreferences.lua]
+
+
+ [03 UserPreferences2.lua] (internal) Writes user preference prefName
to its config file with value
being tostring
'd.
+
+
+ Returns the current year.
+
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for toggling AutoSetStyle.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for displaying the score on ScreenGameplay.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for displaying the StepsDisplay on ScreenGameplay.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for determining the fail length.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for determining the receptor arrow position.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row determining how deep the player options menu should go.
+
+
+
+
+
+
+
+ Returns the for the file at sPath
.
+
+
+ Returns true
if sClassName
is a registered Class.
+
+
+ Loads all commands and sets X and Y for the specified Actor.
+
+
+ Used internally by LoadActor to resolve a path. If optional
is true, then a nil path is returned instead of emitting an error if no file is found.
+
+
+
+
+ Updates ArrowEffects, which sets current values for Tornado, Invert, and Beat.
+
+
+ Returns the Y Offset of a note in column iCol
at beat fNoteBeat
for the provided PlayerState. Y Offset is affected by Speed mods and Accel mods, and impacts most other arrow effects.
+
+
+ Returns the Y position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
+ fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
+
+
+ Returns the Y offset of a note in column iCol
with a Y position of fYPos
for the provided PlayerState.
+ fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
+
+
+ Returns the X position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
+
+
+ Returns the Z position of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
+
+
+ Returns the X rotation of a note with a Y offset of fYOffset
for the provided PlayerState.
+
+
+ Returns the Y rotation of a note with a Y offset of fYOffset
for the provided PlayerState.
+
+
+ Returns the Z rotation of a note at beat fNoteBeat
for the provided PlayerState.
+ bIsHoldHead
is an optional argument which defaults to false. If true, this function will return 0
if the [ArrowEffects] metric DizzyHoldHeads
is false.
+
+
+ Returns the Z rotation of the receptors for the provided PlayerState.
+
+
+ Returns the Alpha of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState.
+ fPercentFadeToFail
is optional and defaults to -1.
+ fYReverseOffsetPixels
is the separation between targets with and without reverse. This argument is optional and will pull defaults from the metrics for [Player]
+ fDrawDistanceBeforeTargetsPixels
is optional and will pull defaults from the [Player]
metric DrawDistanceBeforeTargetsPixels
+ fFadeInPercentOfDrawFar
is optional and will pull defaults from the [NoteField]
metric FadeBeforeTargetsPercent
+
+
+ Returns the Glow of a note in column iCol
with a Y offset of fYOffset
for the provided PlayerState. The arguments are the same as for GetAlpha.
+
+
+ Returns the brightness of a note at beat fNoteBeat
for the provided PlayerState.
+
+
+ Returns true if any arrow effects for the provided PlayerState require the z buffer.
+
+
+ Returns the zoom of a note for the provided PlayerState.
+
+
+ Returns the FrameWidthScale of a hold part with a Y offset of fYOffset
for the provided PlayerState. fOverlappedTime
is optional and will default to 0.
+
+
+
+
+ Enumerated types are lookup tables associating a string to each numerical
+ value for each Enum. For example,
+ [1]
would be the
+ string 'PlayerNumber_P1'
.
+ The functions defined in the Enum
namespace are valid member
+ functions of every Enum where the first argument is
+ omitted and the name of the Enum is used in place
+ of Enum
. Instead of
+ Enum.GetName(
+ )
or
+ Enum.Reverse(
+ )
, one can use
+ : GetName()
or
+ : Reverse()
, respectively.
+
+
+ Both x
and y
need to be elements of the enumerated
+ type e
. Returns a value less than/greater than/equal to
+ 0
corresponding to the numerical value of x
being
+ less than/greater than/equal to the numerical value of y
as
+ determined by
+ Enum.Reverse( e )
.
+
+
+ Returns the type of e
. For example,
+ Enum.GetName( )
+ will return the string 'PlayerNumber'
.
+
+
+ Returns a reverse lookup table for the enumerated type e
. For
+ example: local r =
+ Enum.Reverse( );
+ local n = r['PlayerNumber_P2'];
+ The value of n
in this case would be 1
corresponding
+ to the 0-based indexing using in C++ and not 2
as might be
+ expected for the 1-based indexing used in Lua.
+
+
+
+
+ Returns true
if the type of v
is sType
.
+
+
+ Flushes log files to disk.
+
+
+
+ Tries to read the file at sPath
. If successful, it returns the file's contents.
+ If unsuccessful, it returns two values: nil
and "error"
.
+
+
+ Reports the error through the error reporting system. error_type is the type used for the dialog that is presented, a dialog will not appear for a type the user has chosen to ignore.
+ error is optional an defaults to "Script error occurred.". error_type is optional and defaults to "LUA_ERROR".
+
+
+ Calls func(...)
with two LuaThreadVariables set, and returns the return values of func()
.
+
+
+ Writes sString
to log.txt. Aliased by
+ .
+
+
+ Writes sString
to info.txt and log.txt as
+ a warning. Aliased by .
+
+
+
+
+ Returns a random number. Without arguments, the number is in the range 0..1
. With a single argument (n
), the number is in the range of 1..n
. With two arguments (lower
, upper
), the number is in the range of l..u
.
+
+
+ Sets the seed of the random number generator to seed
.
+
+
+
+
+ Creates a RageFile handle with which one can use the commands in .
+
+
+
+
+ Gets the credits message for Player pn
.
+
+
+
+
+ Returns a table with the playable Steps for the present Song based on the present Game.
+
+
+ Returns true if the song's steps (st
) are playable.
+
+
+ Returns true if the song's StepsType (st
) are playable.
+
+
+
+
+ Returns the number of songs in a Trail.
+
+
+ Returns the Trail's total length in seconds.
+
+
+
+
+
+
+
+
+ This adds a wrapper state around the Actor, which is like wrapping the Actor in an ActorFrame, except that you can use it on any actor, and add or remove wrapper states in response to things that happen while the screen is being used. (wrapping an Actor in an ActorFrame normally requires setting it up before the screen starts)
+ The ActorFrame that is returned is the wrapper state, for convenience.
+ An Actor can have any number of wrapper states. Use GetWrapperState to access wrapper states for the actor.
+
+
+ Returns the number of wrapper states the actor has.
+
+
+ Returns the wrapper state at index i. Think of wrapper states with a higher index as being "further out". Actor is inside Wrapper 1, Wrapper 1 is inside Wrapper 2, Wrapper 2 is inside Wrapper 3, and so on.
+
+
+ Removes the wrapper state at index i.
+
+
+ Returns the Actor's parent, or nil
if it doesn't have one.
+
+
+ Returns the Actor's fake parent, or nil
if it doesn't have one.
+
+
+ Sets the Actor's fake parent to p, or clears it if p is nil.
+
+
+ Returns the Actor's visibility.
+
+
+ Returns the Actor's x position.
+
+
+ Returns the Actor's y position.
+
+
+ Returns the Actor's z position.
+
+
+ Returns what the Actor's x position will be when it reaches its destination tween state.
+
+
+ Returns what the Actor's y position will be when it reaches its destination tween state.
+
+
+ Returns what the Actor's z position will be when it reaches its destination tween state.
+
+
+ Returns the Actor's zoom.
+
+
+ Returns the Actor's X zoom.
+
+
+ Returns the Actor's Y zoom.
+
+
+ Returns the Actor's Z zoom.
+
+
+ Sets Texture Filtering for an Actor to b
.
+
+
+ Plays the commands that follow at an accelerated rate (fRate
* fRate
), where fRate
is in seconds.
+
+
+ Adds a command to the Actor.
+
+
+ Adds rot
to the Actor's current x rotation.
+
+
+ Adds rot
to the Actor's current y rotation.
+
+
+ Adds rot
to the Actor's current z rotation.
+
+
+ Adds xPos
to the Actor's current x position.
+
+
+ Adds yPos
to the Actor's current y position.
+
+
+ Adds zPos
to the Actor's current z position.
+
+
+ [02 Actor.lua] Sets the alignment of an Actor, where h
and v
are in the range 0..1.
+
+
+ Sets whether or not the Actor should animate.
+
+
+ Sets the Actor's aux value. (This can be a solution for coupling data with an Actor.)
+
+
+ If true
, cull the Actor's back faces. See also: .
+
+
+ Sets the Actor's base alpha to fAlpha
, where fAlpha
is in the range 0..1.
+
+
+ Sets the Actor's base X rotation to rot
.
+
+
+ Sets the Actor's base Y rotation to rot
.
+
+
+ Sets the Actor's base Z rotation to rot
.
+
+
+ Sets the Actor's base zoom to zoom
.
+
+
+ Sets the Actor's base X zoom to zoom
.
+
+
+ Sets the Actor's base Y zoom to zoom
.
+
+
+ Sets the Actor's base Z zoom to zoom
.
+
+
+ Sets the Actor to use the specified blend mode.
+
+
+ Makes the Actor bob up and down. Can use to define different bobbing behavior.
+
+
+ Makes the Actor bounce, similar to bob but with one point acting as the ground. Can use to define different bouncing behavior (with effectmagnitude values relating to x, y, and z movement).
+
+
+ [02 Actor.lua]
+
+
+ [02 Actor.lua]
+
+
+ [02 Actor.lua] Centers an Actor on the screen. (equivalent to x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y
)
+
+
+ [02 Actor.lua] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X
)
+
+
+ [02 Actor.lua] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y
)
+
+
+ Determines if the z-buffer should be cleared or not.
+
+
+ [02 Actor.lua] Combines multiple interpolators for complex tweens. tweens
+ can either be a string like "linear,0.25,accelerate,0.75"
or
+ a table with tween information { {Type="linear", Percent=0.25, Bezier=nil}, {Type="accelerate", Percent=0.75, Bezier=nil} }
+
+
+ Crops percent
of the Actor from the bottom, where percent
is in the range 0..1.
+
+
+ Crops percent
of the Actor from the left, where percent
is in the range 0..1.
+
+
+ Crops percent
of the Actor from the right, where percent
is in the range 0..1.
+
+
+ Crops percent
of the Actor from the top, where percent
is in the range 0..1.
+
+
+ Sets the Actor's cull mode to mode
.
+
+
+ Plays the commands that follow at an decelerated rate (1 - (1-fRate
) * (1-fRate
)), where fRate
is in seconds.
+
+
+ Set the Actor's diffuse color to c
.
+
+
+ Sets the Actor's alpha level to fAlpha
, where fAlpha
is in the range 0..1.
+
+
+ Makes the Actor switch between two colors immediately. See Themerdocs/effect_colors.txt for an example.
+
+
+ Sets the Actor's bottom edge color to c
.
+
+
+ Set the Actor's diffuse color to c
, ignoring any alpha value in c
.
+
+
+ Sets the Actor's left edge color to c
.
+
+
+ Sets the Actor's lower left corner color to c
.
+
+
+ Sets the Actor's lower right corner color to c
.
+
+
+ Makes the Actor switch between two colors, jumping back to the first after reaching the second. See Themerdocs/effect_colors.txt for an example.
+
+
+ Sets the Actor's right edge color to c
.
+
+
+ Makes the Actor shift between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
+
+
+ Sets the Actor's top edge color to c
.
+
+
+ Sets the Actor's upper left corner color to c
.
+
+
+ Sets the Actor's upper right corner color to c
.
+
+
+ Tells the Actor to draw itself.
+
+
+ Sets the Actor's draworder to iOrder
, where larger values display first.
+
+
+ [02 Actor.lua] (Added in sm-ssc)
+
+
+ [02 Actor.lua]
+
+
+ Set the Actor's effect clock to s
.
+
+
+ Sets the first effect color to c
.
+
+
+ Sets the second effect color to c
.
+
+
+ Set the Actor's effect magnitude in each direction to the given values.
+
+
+ Set the Actor's effect offset to fTime
. The offset is added to the time into the effect before calculating percent_through_effect.
+
+
+ Set the Actor's effect period to fTime
.
+
+
+ Set the Actor's effect timing.
+ hold_at_zero is before hold_at_full in the argument list for compatibility. A future version will probably swap them because it makes more sense to have hold_at_full come before hold_at_zero.
+ All effect timings must be greater than or equal to zero, at least one of them must be greater than zero.
+ The effect timing controls how long it takes an effect to cycle and how long it spends in each phase.
+ Depending on the effect clock, the actor's time into effect is updated every frame. That time is then translated into a percent_through_effect using the parameters to this function.
+
+ ramp_to_half is the amount of time for percent_through_effect to reach 0.5.
+ hold_at_half is the amount of time percent_through_effect will stay at 0.5.
+ ramp_to_full is the amount of time percent_through_effect will take to go from 0.5 to 1.0.
+ hold_at_full is the amount of time percent_through_effect will stay at 1.0.
+ After reaching the end of hold_at_full, percent_through_effect stays at 0 until hold_at_zero is over.
+
+ The different effects use percent_through_effect in different ways. Some use it to calculate percent_between_colors with this sine wave: sin((percent_through_effect + 0.25f) * 2 * PI ) / 2 + 0.5f
+ Some effects check the internal bool blink_on. blink_on is true if percent_through_effect is greater than 0.5 and false if percent_through_effect is less than or equal to 0.5.
+ Check the effect functions for individual explanations: diffuseblink, diffuseshift, glowblink, glowshift, glowramp, rainbow, wag, bounce, bob, pulse, spin, vibrate.
+
+
+ Set the hold_at_full part of the effect timing while leaving the others unchanged.
+
+
+ Fades percent
of the Actor from the bottom where percent
is in the range 0..1.
+
+
+ Fades percent
of the Actor from the left where percent
is in the range 0..1.
+
+
+ Fades percent
of the Actor from the right where percent
is in the range 0..1.
+
+
+ Fades percent
of the Actor from the top where percent
is in the range 0..1.
+
+
+ Finishes up an Actor's tween immediately.
+
+
+ [02 Actor.lua] Stretches an Actor to fill the entire screen.
+
+
+ Returns the Actor's aux value.
+
+
+ Returns the Actor's base X zoom value.
+
+
+ Returns the Actor's base Y zoom value.
+
+
+ Returns the Actor's base Z zoom value.
+
+
+ Returns true
if the Actor has a command named sCmdName
.
+
+
+ Returns the Actor's current diffuse color.
+
+
+ Returns the Actor's current diffusealpha.
+
+
+ Returns the Actor's current effect delta.
+
+
+ Returns the Actor's current effect magnitude as three floats (not one; I hate Lua.xsd).
+
+
+ Returns the Actor's current glow color.
+
+
+ Returns the Actor's horizontal alignment as a number in the range 0..1.
+
+
+ Returns the Actor's name.
+
+
+ Returns the number of states the Actor has.
+
+
+ Returns the Actor's current height.
+
+
+
+ Returns the Actor's current X rotation.
+
+
+ Returns the Actor's current Y rotation.
+
+
+ Returns the Actor's current Z rotation.
+
+
+ Returns the number of seconds into the currently running effect (e.g. diffuseshift, bob).
+
+
+ Returns how much time is remaining for the current tween.
+
+
+ Returns the Actor's vertical alignment as a number in the range 0..1.
+
+
+ Returns the Actor's current width.
+
+
+ Returns the zoomed height of an Actor.
+
+
+ Returns the zoomed width of an Actor.
+
+
+ Returns true if this actor is currently set to use the effect delta for tweening.
+
+
+ Sets the Actor's glow color.
+
+
+ Makes the Actor glow between two colors immediately. See Themerdocs/effect_colors.txt for an example.
+
+
+ Makes the Actor glow between two colors smoothly, jumping back to the first at the end. See Themerdocs/effect_colors.txt for an example.
+
+
+ Makes the Actor glow between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
+
+
+ Set the fractional horizontal alignment of the Actor according to fAlign
which should be a float in the range 0..1. An alignment of 0 is left aligned while an alignment of 1 is right aligned. See for the common case.
+
+
+ Sets the heading of this Actor to fHeading
.
+
+
+ Hides the Actor for the specified amount of time.
+
+
+ [Deprecated] Compatibility alias for the hidden command, which was removed in sm-ssc. Use instead.
+
+
+ [02 Actor.lua] "Hide if b
is true
, but don't unhide if b
is false
."
+
+
+ Set the horizontal alignment of the Actor according to align
. See for fractional alignment.
+
+
+ Hurries up an Actor's tweening by factor
.
+
+
+ Plays the commands that follow at a normal rate, where fRate
is in seconds.
+
+
+ [02 Lyrics.lua] Plays the lyric command for the specified side
("Back"
or "Front"
).
+
+
+ Sets the Actor's name to sName
.
+
+
+ Stops the Actor's movement. (Usually used for Sprites or Models.)
+
+
+ Sets the pitch of this Actor to fPitch
.
+
+
+ Starts the Actor's movement. (Usually used for Sprites or Models.)
+
+
+ Plays a command named sCommandName
. params
is passed to the command as an argument if it is a table.
+
+
+ [02 Actor.lua] Sets the visibility of the Actor based on p
being a human player.
+
+
+ Makes the Actor grow and shrink. Can use to define different pulsing behavior.
+
+
+ Queues a command named sCommandName
to be played.
+
+
+ Basically creates a command named !sMessageName
(Note the ! at the beginning. The source code says this: "Hack: use "!" as a marker to broadcast a command, instead of playing a command, so we don't have to add yet another element to every tween state for this rarely-used command.")
+
+
+ Makes the Actor change colors continually using colors of the rainbow. Each channel follows a cosine wave, red starts at 0, green starts at 2pi/3, and blue starts at 4pi/3.
+
+
+ Sets the roll of this Actor to fRoll
.
+
+
+ Set the Actor's rotation on the X axis to fAlign
.
+
+
+ Set the Actor's rotation on the Y axis to fAlign
.
+
+
+ Set the Actor's rotation on the Z axis to fAlign
.
+
+
+
+ [02 Actor.lua] An alternative version of .
+
+
+ [02 Actor.lua]
+
+
+ Scales the Actor to cover a rectangle defined by the four float arguments.
+
+
+ Scales the Actor to fit inside a rectangle defined by the four float arguments.
+
+
+ Sets the height of the Actor.
+
+
+ Sets the size of the Actor.
+
+
+ [01 alias.lua] Alias for setsize.
+
+
+ Sets a multi-framed Actor's state to iNewState
.
+
+
+ Sets the width of the Actor.
+
+
+ Use this to make the actor use the effect clock to tween instead of using the global frame delta.
+
+
+ Sets the shadow's color to c
.
+
+
+ Sets the Actor's shadow length to fLength
.
+
+
+ Sets the Actor's horizontal shadow length to fLength
.
+
+
+ Sets the Actor's vertical shadow length to fLength
.
+
+
+ Skews the Actor on the x axis by fAmount
.
+
+
+ Skews the Actor on the y axis by fAmount
.
+
+
+ Waits fSeconds
before executing the next command.
+
+
+ [02 Actor.lua]
+
+
+ Tells the Actor to spin. Can use to define different spinning behavior.
+
+
+
+ Stops any effect the Actor has.
+
+
+ Stops any tweening.
+
+
+ Stretches the Actor to a rectangle of a specific size.
+
+
+ Translates the texture of the actor by x and y.
+
+
+ Determines if the Actor should use texture wrapping or not.
+
+
+ Uses type to determine the tween to use. The type must be one of the TweenType enum values. If the type is note TweenType_Bezier, the params table is ignored. If the type is TweenType_Bezier, then the params table must have 4 or 8 numbers. 4 numbers in the params creates a 1 dimensional bezier curve, 8 numbers creates a 2 dimensional bezier curve.
+ It's usually more convenient to use Actor:linear, Actor:accelerate, and so on, rather than using Actor:tween directly.
+
+
+ Set the fractional vertical alignment of the Actor according to fAlign
which should be a float in the range 0..1. An alignment of 0 is top aligned while an alignment of 1 is bottom aligned. See for the common case.
+
+
+ Set the vertical alignment of the Actor according to align
. See for fractional alignment.
+
+
+ Makes the Actor vibrate violently. Can use to define different vibration behavior.
+
+
+ Sets an Actor's visibility to b.
+
+
+ Makes the Actor wag. Use to define different wag behavior.
+
+
+ Set the x position of the Actor to xPos
.
+
+
+ Set the y position of the Actor to yPos
.
+
+
+ Set the z position of the Actor to zPos
.
+
+
+ Sets the z bias to fBias
.
+
+
+ Enables/disables z-buffer depending on bUse
.
+
+
+ Zooms the Actor to zoom
scale.
+
+
+ Zooms the Actor on both the X and Y axis using zoomX
and zoomY
.
+
+
+ Zooms the Actor to zoom
height. See also: .
+
+
+ Zooms the Actor to zoom
width. See also: .
+
+
+ Zooms the Actor to zoom
scale on the X axis.
+
+
+ Zooms the Actor to zoom
scale on the Y axis.
+
+
+ Zooms the Actor to zoom
scale on the Z axis.
+
+
+ Sets the z testing mode to write on pass if true
, turns it off if false
+
+
+ Sets the z testing mode to testMode
.
+
+
+ Sets z writing to true
or false
based on bWrite
.
+
+
+
+ [02 Actor.lua] Plays the commands that follow using a bezier curve to determine the rate. The curve must have 4 or 8 elements. This is a convenience wrapper around calling Actor:tween with TweenType_Bezier.
+
+
+ [02 Actor.lua] Stretches an Actor to cover the screen. (equivalent to stretchto,0,0,SCREEN_WIDTH,SCREEN_HEIGHT
)
+
+
+ [02 Actor.lua] A customized version of pulse that is more appealing for on-beat effects.
+
+
+ [02 Actor.lua] Sets and Actor as a mask destination.
+
+
+ [02 Actor.lua] Sets an Actor as a mask source. (Also clears zbuffer; other mask sources need to not clear the zbuffer)
+
+
+ [02 Actor.lua] Make graphics their true size at any resolution.
+
+
+ [02 Actor.lua] Scale things back up after they have already been scaled down.
+
+
+ [02 Actor.lua] A customized version of pulse that is more appealing for on-beat effects.
+
+
+ Sets the x and y location of the Actor in one command.
+
+
+
+
+ Adds a child to the ActorFrame from the specified path.
+
+
+ Sets the field of view for the ActorFrame.
+
+
+ Returns the child with a name of sName
.
+ If there are multiple children with that name, returns an array of those children.
+ The table also acts as a pass through layer, function calls pass through to the last child of that name.
+
+
+ Returns a table of all the children in the ActorFrame.
+ The table is indexed by the names of the children.
+ If there are multiple children with the same name, the entry for that name is an array of those children.
+ The table also acts as a pass through layer, function calls pass through to the last child of that name.
+
+
+ Gets the ActorFrame's Draw function.
+
+
+ Returns the number of children in the ActorFrame.
+
+
+ Gets the update function's rate.
+
+
+ Plays the sCommandName
command on the ActorFrame's children.
+
+
+ Plays the sCommandName
command on the ActorFrame's leaves.
+
+
+ Sets if the Actorframe should propagate commands to its children.
+
+
+ [02 Actor.lua] Propagates a command to the ActorFrame's children.
+
+
+ Removes all the children from the ActorFrame.
+
+
+ Removes the specified child from the ActorFrame.
+
+
+ Runs the commands in cmds
on the ActorFrame's children.
+
+
+ Runs the commands in cmds
on the ActorFrame's leaves.
+
+
+ Sets the ActorFrame's ambient light color to c
.
+
+
+ Sets the ActorFrame's diffuse light color to c
.
+
+
+ Sets if the ActorFrame should draw by Z position.
+
+
+ Sets the ActorFrame's Draw function to the specified Lua function.
+
+
+ Sets the field of view for the ActorFrame.
+
+
+ Currently unimplemented since it does not handle errors correctly. Arguments must be passed in as a table.
+
+
+ Sets the ActorFrame's specular light color to c
.
+
+
+ Sets the ActorFrame's update function to the specified Lua function.
+
+
+ Sets the update function's rate to fRate
.
+
+
+ Tells the ActorFrame to sort by draw order.
+
+
+ Sets the vanishing point for the ActorFrame.
+
+
+
+
+ Creates the ActorFrameTexture.
+
+
+ Enables/disables the Alpha Buffer.
+
+
+ Enables/disables the Depth Buffer.
+
+
+ Enables/disables
+
+
+ Enables/disables the Preserve Texture option.
+
+
+ Returns the texture.
+
+
+ Sets the Texture's name to sName
.
+
+
+
+
+ Adds a texture to the ActorMultiTexture. Returns the number of texture units.
+
+
+ Clears all the textures from the ActorMultiTexture.
+
+
+ Sets the EffectMode on the ActorMultiTexture.
+
+
+ Sets the size of the ActorMultiTexture from the specified texture.
+
+
+ Sets the coordinates of the ActorMultiTexture.
+
+
+ Sets a TextureMode on the specified index.
+
+
+
+
+ The list of quad states is used to determine which animation state is used for each quad. The offset is added to the AMV's current state, and the resulting state is used.
+
+
+ Adds an animation state to the ActorMultiVertex. The state_data table must be like this:
+ {{left, top, right, bottom}, delay}
+ left, top, right, and bottom are pixel coordinates, starting at 0. If delay is 0 or negative, the state will last forever.
+
+
+ Forces the AMV to update the texture coordinates on all its quads, even if the current state has not changed.
+
+
+ Returns whether the AMV uses the animation state.
+
+
+ Sets whether the AMV uses the animation state.
+ This works best when using DrawMode_Quads.
+ AMV's can have animated textures like sprites. Each state tells the AMV what part of the texture to use, and how long the state lasts.
+ Use AddState to add a state onto the end, or SetStateProperties to set all the states at once, or SetState to set a single state.
+ Each quad has its own offset that is added to the current state. Use AddQuadState to add to the list of quad states, or SetQuadState to set an existing quad state.
+
+
+ Returns the number of states the AMV has.
+
+
+ Returns the number of quad states in the destination tween state for the AMV.
+
+
+ Returns the id of the current state.
+
+
+ Gets whether the AMV should call the decode function for its texture during updates.
+
+
+ Sets whether the AMV should call the decode function for its texture during updates.
+
+
+ Sets the current state.
+
+
+ Returns the offset of the requested quad state.
+
+
+ Sets the offset of the requested quad state.
+
+
+ Returns a table containing the data for the requested state.
+
+
+ Sets the requested state to the data in state_data. Similar to AddState, but SetStateData only works on states that have already been added.
+
+
+ Each element of the table must be a state_data table, and is used to construct one state. The table as a whole is the entire list of all states for the AMV.
+
+
+ Removes the requested state from the state list.
+
+
+ Removes the requested quad state from the quad state list.
+
+
+ Sets the delay for every state to delay.
+
+
+ Sets how far into its animation the AMV is.
+
+
+ Sets vertex number index
with the properties provided. The tables of properties are each optional and can be provided in any order.
+
+
+ Sets multiple vertices at once. The elements of vertices
should themselves be tables, of the form provided to SetVertex. If vertices
is the first argument it will start from vertex 1. If an integer is provided before vertices
it will start from that vertex. It will add vertices as necessary.
+ Example: self:SetVertices( { { { x1, y1, z1 } , { r1,g1,b1,a1 } , { tcx1,tcy1 } }; { { x2, y2, z2 } , { r2,g2,b2,a2 } , { tcx2,tcy2 } } } )
+
+
+ Sets all the drawn verts of the ActorMultiVertex by evaluating the splines.
+ ("all the drawn verts" means all the verts between FirstToDraw and NumToDraw, the verts that are set to draw in the current tween state.)
+ The parts of the ActorMultiVertex are evenly spaced along the spline in terms of t value.
+ The exact behavior depends on the draw mode.
+ DrawMode_Quads uses all 4 splines, one for each corner.
+ DrawMode_QuadStrip and DrawMode_Strip use 2 splines, one for each edge of the strip.
+ DrawMode_Fan uses one spline, for the edge verts of the fan. The first vert is not touched because it is the center.
+ DrawMode_Triangles uses 3 splines, one for each corner.
+ DrawMode_SymmetricQuadStrip uses 3 splines, one on each edge and one in the center.
+ DrawMode_LineStrip uses 1 spline.
+
+
+ Returns the requested spline. Spline indices range from 1 to 4.
+ ActorMultiVertex splines are not inside the tween state, and will not change the verts until you call SetVertsFromSplines.
+
+
+ Sets the number of vertices.
+
+
+ Returns the number of vertices
+
+
+ Sets the draw state variables to the values in the table.
+ Mode must be a DrawMode.
+ First is the index of the first vertex to draw.
+ Num is the number of vertices to draw. -1 for Num means draw all verts after First.
+ Any value not in the table defaults to the already set value.
+ Examples:
+ -- Sets all three parts of the draw state.
+ self:SetDrawState{Mode="DrawMode_Quads", First= 1, Num= -1}
+ -- Set only the draw mode. First and Num remain unchanged from previous.
+ self:SetDrawState{Mode="DrawMode_Quads"}
+ -- Set the first and number to draw. Draw mode remains unchanged.
+ self:SetDrawState{First= 3, Num= 4}
+
+
+ Get the DrawMode of the destination tween state.
+
+
+ Get the FirstToDraw of the destination tween state.
+
+
+ Get the NumToDraw of the destination tween state.
+
+
+ Get the DrawMode of the current tween state.
+
+
+ Get the FirstToDraw of the current tween state.
+
+
+ Get the NumToDraw of the current tween state.
+
+
+ Returns the ActorMultiVertex's texture.
+
+
+ Sets the EffectMode of the ActorMultiVertex.
+
+
+ Sets the TextureMode of the ActorMultiVertex.
+
+
+ Sets the width of the line for DrawMode_LineStrip.
+
+
+ Sets the texture to texture
+
+
+ Sets the texture at from the file path path
.
+
+
+
+
+ Returns the target of the ActorProxy.
+
+
+ Sets the ActorProxy target to a
.
+
+
+
+
+ Returns the scroller's current item.
+
+
+ Returns the item the scroller's going to.
+
+
+ Returns how long it will take for the scroller to completely scroll through all its items.
+
+
+ Returns the number of items in the ActorScroller.
+
+
+ Returns the number of seconds the scroller pauses between items.
+
+
+ Returns the number of seconds until the scroller reaches its destination.
+
+
+ Compatibility alias for .
+
+
+ Positions the scroller items.
+
+
+ Scrolls through all the items in the scroller.
+
+
+ Compatibility alias for .
+
+
+ Scrolls through all the items in the scroller with padding at the beginning and end.
+
+
+ Compatibility alias for .
+
+
+ Sets the item the scroller should scroll to next and makes it the current item.
+
+
+ Sets the item the scroller should scroll to next.
+
+
+ Sets if the scroller should catch up fast.
+
+
+ Compatibility alias for .
+
+
+ Specifies if the scroller should loop or not.
+
+
+ Sets the scroller's mask to a Quad that is fWidth
by fHeight
pixels.
+
+
+ Sets the scroller to draw fNumItems
items.
+
+
+ Sets the number of subdivisions in the scroller.
+
+
+ Compatibility alias for .
+
+
+ Sets the scroller's pause countdown to fSecs
.
+
+
+ Sets the scroller's pause between items to fSeconds
.
+
+
+ Sets how many seconds the scroller should spend on each item.
+ A value of 0
means the scroller will not scroll.
+
+
+ Compatibility alias for .
+
+
+ Sets the scroller's transform function to the specified Lua function.
+
+
+ Sets the scroller's transform function from fItemHeight
.
+
+
+ Sets the scroller's transform function from fItemWidth
.
+
+
+
+
+ This Actor represents a playable sound. There are two attributes that can be set on load.
+ * SupportPan
- Let the sound pan from side to side.
+ * SupportRateChanging
- Let the sound change rate and pitch.
+ * IsAction
- If true, the sound is an action sound, and will be muted if the MuteActions preference is turned on.
+
+
+ Returns the that can be played by this Actor.
+
+
+ Returns whether the sound is an action.
+
+
+ Loads the sound at sPath
.
+
+
+ Pauses or unpauses the sound based on bPause
.
+
+
+ Plays the sound.
+
+
+ [02 Sound.lua] Plays the sound on the given player's side. You must set SupportPan = true
on load.
+
+
+ Sets whether the sound is an action.
+
+
+ Stops the sound.
+
+
+
+
+ Returns true if Announcer sAnnouncer
exists.
+
+
+ Returns a table of installed announcers.
+
+
+ Returns the current announcer's name.
+
+
+ Sets the announcer to sNewAnnouncer
.
+
+
+
+
+ Returns true
if the application presently has focus.
+
+
+ Returns the name of the architecture in use.
+
+
+
+
+ Returns true
if the Banner is currently scrolling.
+
+
+
+
+
+ Loads the background from an UnlockEntry.
+
+
+ Loads the banner from an UnlockEntry.
+
+
+ Loads the card image from the specified Character.
+
+
+ Loads the banner from the cache based on sPath
(typically or ).
+
+
+ Loads a Banner from a specified Course.
+
+
+ Loads a Banner from a specified Song.
+
+
+ Loads a Banner from a specified Song Group.
+
+
+ Loads a Banner from a specified SortOrder.
+
+
+ Loads an icon from the specified Character.
+
+
+ See .
+
+
+ See .
+
+
+
+
+
+
+
+ Add the attribute attr
to the string at position
+ iPos
.
+ The attribute is a table that must contain Length
+ which specifies how many (multi-byte) characters the attribute
+ is to apply. If Length=-1
, then the attribute applies
+ until another attribute overrides it.
+ If the table contains Diffuse
, then the color value
+ is applied to the range of text.
+ If the table contains Diffuses
, then it should be
+ an array of 4 colors which specify the diffuse color for the
+ top left, top right, bottom left, and bottom right.
+ If the table contains Glow
, then the color value
+ is applied as a glow to the range of text.
+ Example:
+ attr = { Length = 10; Diffuse = color("#AABBCC"); }
+
+
+ Clear all attributes associated with the BitmapText.
+
+
+ [02 Actor.lua] Sets the diffuse and stroke color of text in one command.
+
+
+ Returns the text that is currently set.
+
+
+ Causes each character of text to be randomly distorted by
+ distortion_percentage of its size when the text is set. The distortion
+ only changes when the text changes.
+
+
+ Turns off distortion.
+
+
+ Returns whether the diffuse colors in the attributes are multiplied by the general diffuse colors of the BitmapText.
+
+
+ If mult_attrs_with_diffuse is set to true, then the diffuse colors in the attributes are multiplied by the general diffuse colors of the BitmapText.
+
+
+ If bJitter
is true
, move each character of the string around by a small random amount.
+
+
+ If use_zoom is true, this BitmapText will use the zoom that has been applied to it when calculating to change its base zoom from maxheight or maxwidth.
+
+
+ Set the maximum height of the unzoomed text to fHeight
. If fHeight
is 0
, then there is no maximum height.
+
+
+ Set the maximum width of the unzoomed text to fWidth
. If fWidth
is 0
, then there is no maximum width.
+
+
+ [02 Actor.lua] Remove any stroke color.
+
+
+ [02 Actor.lua] Alias for setting to false
.
+
+
+ If true
, set each character of the text in turn to the rainbow colors in the metrics BitmapText::RainbowColor#
.
+
+
+ Set the text to sText
. This clears all attributes.
+
+
+ [02 Actor.lua] Sets text using string.format(sFormat, ...)
.
+
+
+ [02 Actor.lua] Alias for .
+
+
+ Sets the stroke color to c
.
+
+
+ If the text is glowing, specify if just the stroke layer, just the inner layer, or both are affected by the glow.
+
+
+ If true
, make all text uppercase.
+
+
+ Add iSpacing
pixels of padding between lines of text.
+
+
+ Wrap the unzoomed text at iWidth
pixels. If you or by x
and you want the text wrapped at width
, then you should use wrapwidthpixels(width/x)
.
+
+
+
+
+ Returns the text that is currently set at the exact moment you call it. This is likely only going to be useful in an Update command.
+
+
+ Sets the BPMDisplay from the specified Course.
+
+
+ Sets the BPMDisplay from the GameState.
+
+
+ Sets the BPMDisplay from the specified Song.
+
+
+ Sets the BPMDisplay from the specified Steps.
+
+
+
+
+ Returns the path to the character's card graphic.
+
+
+ Returns this character's directory.
+
+
+ Returns this character's ID.
+
+
+ Returns the path of the dancing animation of this character.
+
+
+ Returns the character's display name.
+
+
+ Returns the path to the character's icon.
+
+
+ Returns the path of the model of this character.
+
+
+ Returns the path of the rest animation of this character.
+
+
+ Returns the path to the character's ScreenSelectMode icon.
+
+
+ Returns the path to the character's ScreenStage icon.
+
+
+ Returns the path of the warm-up animation of this character.
+
+
+
+
+ Returns a table of all characters installed.
+
+
+ Return the corresponding to sID
.
+
+
+ Returns a random character.
+
+
+ Returns the number of characters available.
+
+
+
+
+ Loads the ComboGraph commands from the Metrics in group sMetricsGroup
.
+
+
+ Sets the values of the ComboGraph using the specified StageStats and PlayerStageStats.
+
+
+
+
+ Loads the ControllerStateDisplay from the specified GameController.
+
+
+ Loads the ControllerStateDisplay from the specified MultiPlayer.
+
+
+
+
+ Returns true
if all of the songs in the course have been defined (as opposed to random songs).
+
+
+ Returns a table of all the Trails in the Course.
+
+
+ Returns the path to the Course's background.
+
+
+ Returns the path to the Course's banner.
+
+
+ Returns the Course's directory.
+
+
+ Returns a table of CourseEntry items.
+
+
+ Gets the CourseEntry at iIndex
from the Course.
+
+
+ Returns the Course's . (Returns CourseType in SM5; integer in SM4)
+
+
+ Returns the description for this Course.
+
+
+ Returns the full display title of the Course.
+
+
+ Returns the estimated number of stages for the Course.
+
+
+ Returns the goal seconds for the Course.
+
+
+ Returns the Course's group name.
+
+
+ Returns the Course's . (Returns PlayMode in SM5; integer in SM4)
+
+
+ Returns the name of the person who scripted the Course.
+
+
+ Returns the total length of the Course in seconds.
+
+
+ Returns the full transliterated title of the Course.
+
+
+ Returns true
if the Course has a background.
+
+
+ Returns true
if the Course has a banner.
+
+
+ Returns true
if the Course has modifiers.
+
+
+ Returns true
if the Course has timed modifiers.
+
+
+ Returns true
if the Course is an edit.
+
+
+ Returns true
if the Course was automatically generated.
+
+
+ Returns true
if the Course is Endless.
+
+
+ Returns true
if the Course is Nonstop.
+
+
+ Returns true
if the Course is Oni.
+
+
+ Returns true
if the Course is playable in StepsType st
.
+
+
+ Returns true
if the Course is a ranking course.
+
+
+
+
+ Sets the CourseContentsList from the GameState.
+
+
+
+
+ Returns the Song that this CourseEntry corresponds to.
+
+
+
+ Returns the number of lives gained after completing the song.
+
+
+ Returns the number of seconds gained after completing the song.
+
+
+ Returns any stage (non-timed) modifiers.
+
+
+ Returns the number of modifier changes in this CourseEntry.
+
+
+ Returns a comma-delimited string representing various facts about the CourseEntry.
+
+
+ Returns true
if this CourseEntry is a fixed song.
+
+
+ Returns true
if this CourseEntry is secret.
+
+
+
+
+ Generates a random UUID (version 4).
+
+
+ Returns the MD5 hash for the file at sPath
.
+
+
+ Returns the MD5 hash for s
.
+
+
+ Returns the SHA-1 hash for the file at sPath
.
+
+
+ Returns the SHA-1 hash for s
.
+
+
+
+
+ All functions in this class have camel case equivalents, use whichever naming style you prefer.
+ This spline implementation is a cubic spline.
+ A spline is a line calculated from a small set of points with mathematical smooting applied.
+ Splines can have any number of dimensions, but splines owned by actors (the ones inside NCSplineHandler and ActorMultiVertex) always have 3 dimensions.
+
+
+ Solves the spline, setting the coefficients.
+
+
+ Evaluates the spline at the given t value, returning a table of the results for each dimension of the spline.
+ t can range from 0 to the value returned by get_max_t().
+ A normal spline will return its starting point for any t value less than 0 and its end point for any t value greater than the max.
+ A looped spline adjust the t value to be within the its range by adding or subtracting the max t as needed. (so if the max t is 4 and you evaluate at 5, it will return the same as if you evaluated at 1.)
+
+
+ Evaluates the derivative at t.
+
+
+ Evaluates the second derivative at t.
+
+
+ Evaluates the third derivative at t.
+ Second and third derivative functions exist because they're possible, not because they're expected to be useful. The fourth derivative would be 0 because the equation for evaluating the spline is "a + (b*t) + (c*t^2) + (d*t^3)".
+
+
+ Sets point i of the spline to the position specified by the table p.
+
+
+ Sets the coefficients of the spline at point i.
+ Each table must contain a value for each dimension of the spline.
+ Solving the spline normally should cover all normal usage, this is for people that want a spline with an abnormal behavior, so if you set the coefficients directly, expect to end up with an unsmooth shape.
+
+
+ Returns a table containing the tables of coefficients for the point i.
+
+
+ Sets the spatial extent of dimension d of the spline to e.
+ The spatial extent exists to handle numbers that exist in a finite looped space, instead of the flat infinite space.
+ To put it more concretely, spatial extent exists to allow a spline to control rotation with wrapping behavior at 0.0 and 2pi, instead of suddenly jerking from 2pi to 0.0.
+
+
+ Returns the spatial extent of dimension d of the spline.
+
+
+ Returns the max t value the spline extends to. For a normal spline, this will be size()-1. For a looped spline, this will be size().
+
+
+ Sets the number of points in the spline. You must set the number of points before trying to set the position of any point.
+
+
+ Returns the number of points in the spline.
+
+
+ Sets the number of dimensions the spline has.
+ Splines that are owned by actors (the ones inside ActorMultiVertex and NCSplineHandler) cannot have their number of dimensions changed because the actors require them to have 3 dimensions.
+
+
+ Returns the number of dimensions the spline has.
+
+
+ Returns true of the spline has zero points, or false if it has more than zero points.
+
+
+ Sets whether the spline is looped. A looped spline is one where the end point is connected to the start point.
+
+
+ Returns whether the spline is looped.
+
+
+ Sets whether the spline is polygonal. If the spline is polygonal, then it will have straight lines between the points instead of curves.
+
+
+ Returns whether the spline is polygonal.
+
+
+ Sets whether the spline is dirty. A dirty spline is one that has been changed in some way that affects its shape. When solve() is called, the spline will only be solved if it is dirty. The dirty flag is automatically set by everything, so you should never have to call this function.
+
+
+ Returns whether the spline is currently dirty.
+
+
+ Destroys the spline, freeing the memory allocated for it. This can only be called on splines created with create_spline().
+
+
+
+
+ Sets the DifficultyIcon's state from the difficulty passed in.
+
+
+ Sets the DifficultyIcon's Player to pn
,
+ then sets the DifficultyIcon's state from the difficulty of Steps pSteps
+
+
+ Sets the DifficultyIcon's Player to pn
,
+ then sets the DifficultyIcon's state from the difficulty of Trail pTrail
+
+
+ Sets the DifficultyIcon's Player to pn
.
+
+
+ Blanks the DifficultyIcon.
+
+
+
+
+ Returns the index of the last banner loaded.
+
+
+ Loads the fallback course banner.
+
+
+ Loads the fallback banner.
+
+
+ Loads the card image from the specified Character.
+
+
+ Loads a Banner from a specified Course.
+
+
+ Loads a Banner from a specified Song.
+
+
+ Loads a Banner from a specified Song Group.
+
+
+ Loads a Banner from a specified SortOrder.
+
+
+ Loads an icon from the specified Character.
+
+
+ Loads the Random banner.
+
+
+ Loads the Roulette banner.
+
+
+ See .
+
+
+ See .
+
+
+
+
+ Sets the StepsDisplayList from the GameState.
+
+
+
+
+ Returns true
if notes are counted separately in this game.
+
+
+ Returns the mapped judgment for tns
.
+
+
+ Returns the name of the game such as "dance" or "pump".
+
+
+ Returns whether this game allows the players to have separate styles.
+
+
+
+
+ Returns any announcer that may have been set.
+
+
+ Returns any Character associated with this item (or nil
if there isn't one).
+
+
+ Returns any Course that may have been set.
+
+
+ Returns a course difficulty, if one is set in the GameCommand.
+
+
+ Returns a difficulty, if one is set in the GameCommand.
+
+
+ Returns the index of this item.
+
+
+ Returns any MultiPlayer that may have been set.
+
+
+ Returns the choice name.
+
+
+ Returns the PlayMode associated with this GameCommand.
+
+
+ Returns any preferred modifiers that may have been set.
+
+
+ Returns any Profile ID that may have been set.
+
+
+ Returns any screen that may have been set as a string.
+
+
+ Returns any Song that may have been set.
+
+
+ Returns the name of any song group that may have been set.
+
+
+ Returns the sort order, if the GameCommand has set one.
+
+
+ Returns any stage modifiers that may have been set.
+
+
+ Returns any Steps that may have been set.
+
+
+ Returns any Style that may have been set.
+
+
+ Returns the display text.
+
+
+ Returns any Trail that may have been set.
+
+
+ Returns any Url that may have been set.
+
+
+
+
+ Return the first for the specified game
.
+
+
+ Returns true
if any noteskins exist for the specified Game s
.
+
+
+ Return the localized string representation of st
.
+
+
+ Returns a table of all selectable games.
+
+
+ Returns a table of all the styles for the that exist for game
.
+
+
+ Sets the current game to Game
. The second argument is optional, and if provided will determine which theme is loaded when the game changes. If the second argument is not provided, the default theme from the preferences for the new game type will be loaded.
+ If only the game changes, the screen specified by the Common::AfterGameChangeScreen metric will be loaded.
+ If the game and the theme both change, the screen specified by the Common::AfterGameAndThemeChangeScreen metric will be loaded.
+ The Common::InitialScreen metric will be used if the appropriate metric for the change is blank or invalid.
+
+
+
+
+ Set the music volume to fVolume
for fDuration
seconds.
+
+
+
+ Return the sound balance for pn
.
+
+
+ Plays a sound from the current announcer.
+
+
+ Play the sound at musicPath
starting from musicStart
for
+ musicLength
seconds one time. Both fadeIn
and
+ fadeOut
can be customized as required. loop
+ tells the sound manager to loop the music part. applyRate
+ tells the sound manager to apply the current music rate. If alignBeat
+ is true or nil, the length is automatically adjusted to cover an integer number of beats.
+
+
+ Play the sound at sPath
one time. is_action
is optional, if it is true, the sound is an action sound, and will be muted if the MuteActions preference is turned on.
+
+
+ Stops the music.
+
+
+ When music is requested to change, the new music does not start immediately due to latency and buffering. This will return true if the newest music has not yet actually begun.
+
+
+
+
+ Adds another stage to the specifed player.
+
+
+ Applies the specified modifiers for the specified player's preferred modifier set.
+
+
+ Applies the song options of ModsLevel_Preferred to the other ModsLevels.
+
+
+ Applies the specified modifiers for the specified player for the current stage.
+
+
+ Returns true
if any player has performed a feat worthy of ranking.
+
+
+ The second argument is optional. Apply the GameCommand represented by sCommand
+ for pn
, if given. See .
+
+
+ Checks various things to determine whether the game will crash when gameplay starts. Returns false and a string if gameplay cannot be entered safely.
+ Might not work in all cases, but will catch things like a player not having
+ steps set or no current song or style. Mainly exists for people with a custom ScreenSelectMusic replacement.
+ Example:
+ local can, reason= GAMESTATE:CanSafelyEnterGameplay()
+ if not can then
+ lua.ReportScriptError("Cannot safely enter gameplay: " .. tostring(reason))
+ end
+
+
+ Removes any stage modifiers that are illegal for course play.
+
+
+ Returns true
if pn
's options will disqualify them for ranking.
+
+
+ Returns true
if enough credits have been inserted to join.
+
+
+ fishpolk.mid; See also: Rise of the Triad
+
+
+ Returns the environment table. See .
+
+
+ Returns the current for the specified .
+
+
+ Returns the current .
+
+
+ Return the number of inserted but unused coins. This number is
+ decremented when players join.
+
+
+ Return the number of coins needed to join based on the current coin and premium modes
+ as well as the number of people joined, if that matters for the premium mode. See
+ and .
+
+
+ The s in a are numbered sequentially
+ starting from 0. Return the number of the current .
+
+
+ Return the current number of seconds that have passed in the current song. This value can be negative.
+
+
+ Return the current .
+
+
+ Return the current .
+
+
+ Return the current .
+
+
+ Return the current .
+
+
+ Returns the current stage index (starts at 0).
+
+
+ Return the current for the specified Player.
+
+
+ Return a variable number of arguments based on the being
+ played by all players. For each distinct being played by
+ the players, in increasing order,
+ the difficulty and description of the is returned as strings.
+ For example,
+ local credits = {GAMESTATE:GetCurrentStepsCredits()};
+ will make a table of the difficulties and descriptions.
+
+
+ Return the current .
+
+
+ Return the current for the specified player.
+
+
+ Return a string representation of the default song options.
+
+
+ Returns the value.
+
+
+ Return the easiest of the
+ currently selected steps by all players. For example, if player 1 has
+ selected Hard steps and player 2 has selected Medium steps, Medium will
+ be returned.
+
+
+
+
+
+ Return the Edit Local (during Profile editing)
+ or nil
if it does not exist.
+
+
+ Returns the ID of the Edit Local (during Profile editing).
+
+
+ Return the source for the editor or nil
+ if it does not exist.
+
+
+ Returns a table of enabled players.
+
+
+ Returns the name of the currently expanded section.
+
+
+ Return the random seed for the game.
+
+
+ Return true
if the gameplay lead in is enabled. If
+ false
, gameplay begins immediately.
+
+
+ Return the hardest of the
+ currently selected steps by all players. For example, if player 1 has
+ selected Hard steps and player 2 has selected Medium steps, Hard will
+ be returned.
+
+
+ Returns an array of s corresponding to Human players.
+
+
+ Returns the index of the next song in the course.
+
+
+ Returns the master player number.
+
+
+ Returns true
if the game is Multiplayer.
+
+
+ Returns the PlayerState for the specified MultiPlayer.
+
+
+ Returns the number of active multiplayer NoteFields.
+
+
+ Returns the number of players enabled.
+
+
+ Returns the number of sides joined.
+
+
+ Returns the number of stages for the current Song and its Steps or the current Course.
+
+
+ Returns the number of stages left for player pn
.
+
+
+ Returns the display name for player pn
.
+
+
+ Returns the PlayerState for player pn
.
+
+
+ Returns the current PlayMode.
+
+
+ Returns the preferred difficulty.
+
+
+ Returns the preferred song.
+
+
+ Returns the preferred song group.
+
+
+ Returns the current Premium.
+
+
+
+ Returns the smallest number of stages left for any human player.
+
+
+ [01 alias.lua] Returns the current beat of the song.
+
+
+ [01 alias.lua] Returns the current beat of the song without an offset.
+
+
+ Returns the current visible beat of the song.
+
+
+ [01 alias.lua] Returns the song's current beats per second.
+
+
+ [01 alias.lua] Returns true
if a delay is active in the song.
+
+
+ [01 alias.lua] Returns true
if the song is currently in a freeze.
+
+
+ Returns the song options for the specified ModsLevel as a string.
+
+
+ Returns the song options as a string.
+
+
+ Returns the song options for the specified ModsLevel as an object.
+
+
+ Returns how much of the song is through at beat fBeat
.
+
+
+ Returns the current SongPosition.
+
+
+ Returns the current SortOrder.
+
+
+ Returns the StageResult for player pn
.
+
+
+ Returns the current stage index.
+
+
+ Returns the current StepsSeconds, which is the time value used to set the samples in a player's life record.
+
+
+ Return the random seed for the current stage.
+
+
+ Returns true
if the workout goal is complete.
+
+
+ Returns true
if an extra stage was earned.
+
+
+ Returns true
if either player does not have a profile loaded, and there is a loadable profile.
+
+
+ Returns true
if either player has a profile loaded.
+
+
+ Returns true
if we are specifically in the Step Editor's
+ editing portion. If in recording or playing mode, this will return
+ false
.
+
+
+ Inserts iCoins
number of coins. iCoins
can be negative or positive.
+
+
+ Inserts one credit. To deduct a credit, pass a negative integer representing the number
+ of coins per credit to InsertCoin.
+
+
+ Returns true
if this is an extra stage.
+
+
+ Returns true
if any human player is using a memory card.
+
+
+ Returns true
if playing in Battle mode.
+
+
+ Returns true
if playing in a Course mode.
+
+
+ Returns true
if in Demonstration mode.
+
+
+ Returns true
if the match was a draw.
+
+
+ Returns true
if Event Mode is on, temporary or otherwise.
+
+
+ Returns true
if this is the first extra stage.
+
+
+ Returns true
if this is the second extra stage.
+
+
+ Returns true
if player pn
has completed the current Goal.
+
+
+ Returns true
if player pn
is human.
+
+
+ Returns true
if player pn
is enabled.
+
+
+ Returns true
if player pn
has joined the game.
+
+
+ Returns true
if player pn
is the winner.
+
+
+ Joins player pn
. Does not deduct coins.
+
+
+ Similar to JoinPlayer, but checks whether the player is allowed to join and returns false if the player is not allowed to join. Also deducts coins for joining. A player can't join if PlayersCanJoin() returns false, or that side is already joined (is true for both sides when in a style that is OnePlayerTwoSides), or there are not enough coins.
+
+
+ If profiles are not loaded, this will load the profiles for each player. It will load from memory cards if they are present, and local profiles otherwise. It will load edits if LoadEdits
is true, or by default if the argument is omitted.
+
+
+ Returns true
if player pn
is using modifier sModifier
.
+
+
+ Returns true
if players can join the game.
+
+
+ Refreshes the NoteSkin data for the current game.
+
+
+ Resets the GameState.
+
+
+ Resets the specific Player's mods to the default settings.
+
+
+ Saves the bookkeeping and machine profile data.
+
+
+ Save profiles.
+
+
+ Sets the current for the specified .
+
+
+ Sets the current Course to course
.
+
+
+ Sets the current PlayMode to pm
.
+
+
+ Sets the current Song to song
.
+
+
+ Sets Player pn
's current Steps to steps
.
+
+
+ Sets current Style to the provided style. Either a style object or a style string can be provided. If current steps for either player are not valid in the new style, they will be cleared.
+
+
+ Sets the current Trail to trail
.
+
+
+ Tells the engine that the theme explicitly set the fail type for the players so that it won't override it with the easier settings for beginner or easy.
+
+
+ Sets if the Jukebox should use modifiers.
+
+
+
+
+
+ Sets the number of multiplayer notefields to iFields
+
+
+ Sets the preferred difficulty of Player pn
to Difficulty dc
.
+
+
+ Sets the preferred Song to song
.
+
+
+ Sets the preferred song group to sGroup
.
+
+
+ Sets the Song Options from so
using ModsLevel m
.
+
+
+ Turns temporary Event Mode on or off, depending on bOn
.
+
+
+ Stores the ranking name for the player. Use this at the end of a round, on a name entry screen or similar, to set the name for the high scores the player has earned.
+
+
+ Determines if Judgment W1 should be shown based on bOn
.
+
+
+ Unjoins player pn
.
+
+
+
+
+ Loads the GradeDisplay commands from the Metrics in group sMetricsGroup
.
+
+
+ Sets the GradeDisplay to show Grade g
.
+
+
+
+
+ Loads the GraphDisplay commands from the Metrics in group sMetricsGroup
.
+
+
+ Sets the values of the GraphDisplay using the specified StageStats and PlayerStageStats.
+
+
+
+
+ Sets the GrooveRadar values for Player pn
to empty.
+
+
+ Sets the GrooveRadar values for Player pn
from RadarValues rv
+
+
+ Sets the GrooveRadar values for Player pn
to the specified (floating point) values in the table.
+
+
+
+
+ Returns two tables representing the tips and alternate tips in the HelpDisplay.
+
+
+ [02 HelpDisplay.lua] Sets the tips from a Song or Course.
+
+
+ Sets the seconds between switches of tips to fSeconds
.
+
+
+ Sets the HelpDisplay's tips using tips
(and optionally altTips
).
+
+
+ Sets the HelpDisplay's text from sTips
using colons to separate new sections.
+
+
+
+
+ Returns the date and time the high score was achieved.
+
+
+ Returns the Grade of this high score.
+
+
+ Returns the HighScore for this PlayerStageStats.
+
+
+ Return the number of HoldNoteScores that match hns
.
+
+
+ Returns the Max Combo of this high score.
+
+
+ Returns the modifiers used for this HighScore.
+
+
+ Returns the name associated with the high score.
+
+
+ Returns the Peak Combo Award for this high score.
+
+
+ Returns the percentage of dance points associated with the high score.
+
+
+ Returns the RadarValues for this HighScore.
+
+
+ Returns the score associated with the high score.
+
+
+ Retrns the Stage Award for this high score.
+
+
+ Returns the number of seconds survived associated with the high score.
+
+
+ Return the number of TapNoteScores that match tns
.
+
+
+ Returns true
if this high score's name uses a fill-in marker.
+
+
+
+
+ You can get a HighScoreList using .
+
+
+ Returns a table of the high scores.
+
+
+ Returns the highest score for name in the list. Returns nil if there is no score for name in the list.
+
+
+ Returns the rank of the highest score for name in the list. Returns 0 if there is no score for name in the list. (returns 1 if name has the top score, 2 if name has the second place score, and so on)
+
+
+
+
+ Loads the HoldJudgment for the specified MultiPlayer.
+
+
+
+
+ Returns the mouse wheel value.
+
+
+ Returns the X position of the mouse.
+
+
+ Returns the Y position of the mouse.
+
+
+
+
+ Returns the amount of life left in the LifeMeter as a float in the range 0..1.
+
+
+ Returns true
if failing.
+
+
+ Returns true
if the LifeMeter is "hot".
+
+
+ Returns true
if in danger.
+
+
+
+
+ Changes the player's life by iNumLives
. (Negative values subtract lives.)
+
+
+ Returns the number of lives remaining.
+
+
+ Returns the number of total lives.
+
+
+
+
+ Returns true
if player pn
's card is locked.
+
+
+ Return the state for player pn
.
+
+
+ Returns the name of the storage device.
+
+
+ Returns true
if player pn
's name is available.
+
+
+
+
+ Stops the MenuTimer by setting it to 99.99 and pausing.
+
+
+ Returns the current MenuTimer's value.
+
+
+ Pauses the MenuTimer, stopping it from counting down.
+
+
+ Compatibility alias for SetSeconds.
+
+
+ Sets the MenuTimer's value to fSeconds
.
+
+
+ Sets the MenuTimer's silent setting to bSilent
.
+
+
+ Starts up the timer.
+
+
+ Sets the MenuTimer's stealth setting to bStealth
. If
+ true
, the timer will be invisible and silent.
+
+
+ Stops the MenuTimer by setting it to 0 and pausing.
+
+
+
+
+ Broadcast the message to all listeners subscribed to sMessage
. The
+ second argument is an optional table of parameters. It may be omitted or explicitly
+ set to nil
.
+
+
+ Sets whether logging of messages is enabled. If log is true, all messages that pass through Broadcast (from the engine for from the theme or from anywhere else), will be logged with Trace.
+
+
+
+
+ Sets the width of the MeterDisplay to fWidth
.
+
+
+
+
+ Returns the model's default animation.
+
+
+ Controls if the model should loop or not.
+
+
+ Plays animation sAniName
at fPlayRate
speed (default 1.0).
+
+
+ Sets how far into the animation the model is.
+
+
+ Sets the current animation's playback rate to fRate
.
+
+
+ Sets the model's default animation to sAnimation
at fPlayRate
speed (default 1.0).
+
+
+
+ Returns the number of states the Model has.
+
+
+
+
+ Loads the ModIconRow of Player pn
from the Metrics in group sMetricsGroup
.
+
+
+
+
+ Changes the sort order of the wheel. Returns true
if the order was changed.
+
+
+ Returns the name of the currently selected section.
+
+
+ Returns true
if the MusicWheel is currently handling Roulette selection.
+
+
+ Selects a song. Returns false
on failure.
+
+
+ Selects a course. Returns false
on failure.
+
+
+
+
+ Returns a string from the specified element and value.
+
+
+ Returns a string from the specified element and value using NoteSkin sNoteSkin
.
+
+
+ Returns a command from the specified element and value.
+
+
+ Returns a command from the specified element and value using NoteSkin sNoteSkin
.
+
+
+ Returns a bool from the specified element and value.
+
+
+ Returns a bool from the specified element and value using NoteSkin sNoteSkin
.
+
+
+ Returns a float from the specified element and value.
+
+
+ Returns a float from the specified element and value using NoteSkin sNoteSkin
.
+
+
+ Returns a integer from the specified element and value.
+
+
+ Returns a integer from the specified element and value using NoteSkin sNoteSkin
.
+
+
+ Returns the path for the specified sButton sElement
.
+
+
+ Returns the path for the specified sButton sElement
using NoteSkin sNoteSkin
.
+
+
+ Returns the actor for the specified sButton sElement
.
+
+
+ Returns the actor for the specified sButton sElement
using NoteSkin sNoteSkin
.
+
+
+
+ Returns true
if the strName
noteskin exists in the current gametype.
+
+
+ Returns a table of noteskin names for the current gametype.
+
+
+
+
+ All functions in this class have camel case equivalents, use whichever naming style you prefer.
+ The spline handler holds info on how the spline is used by the engine.
+ Each get/set pair of functions in this class is for a different aspect of the spline's behavior.
+
+
+ Returns the spline for this handler.
+
+
+ Returns the beats per t value of the spline. If the beats_per_t is 4, then a note must be on screen for 4 beats to traverse from one point on the spline to the next.
+
+
+ Sets the beats per t value for the spline.
+
+
+ Returns the t value that receptors are evaluated at.
+
+
+ the t value that receptors are evaluated at.
+
+
+ Returns the mode the spline is set to.
+ "NoteColumnSplineMode_Disabled" means the spline will not affect the notes or receptors at all.
+ "NoteColumnSplineMode_Offset" means the spline will added to the effects from the mods.
+ "NoteColumnSplineMode_Position" means only the spline affect the notes and mods will be ignored. (but only mods that affect the same aspect of the note as the spline will be disabled. So a rotation spline won't disable Mini or Tiny, but a zoom spline will, and a zoom spline won't disable Dizzy, Twirl, or Roll, but a rotation spline will.)
+
+
+ Sets the current spline mode for this handler.
+
+
+ Returns whether the current song beat is subtracted from a note's beat when calculating the t value to use on the spline.
+
+
+ Sets whether the current song beat is subtracted from a note's beat when calculating the t value to use on the spline.
+
+
+
+
+ All functions in this class have camel case equivalents, use whichever naming style you prefer.
+ Position, rotation, and zoom each have separate spline handlers to allow them to have separate independent behavior.
+ It is important to note that the spline handlers are inside the tween state, so whenever you start a new tween on the actor, you need to refetch the spline handlers.
+
+
+ Returns the handler for the position spline.
+
+
+ Returns the handler for the rotation spline.
+ The rotation applied by the rotation spline is in radians.
+ For convenience, the spatial extent of the rotation spline defaults to 2pi.
+
+
+ Returns the handler for the zoom spline.
+
+
+
+
+ All functions in this class have camel case equivalents, use whichever naming style you prefer.
+
+
+ Makes the NoteField act as if a hold note was hit in the column, with the given score and bright setting.
+ The callback for did_hold_note will not be called.
+
+
+ Makes the NoteField act as if a tap note was hit in the column, with the given score and bright setting.
+ The callback for did_tap_note will not be called.
+
+
+ Returns a table of the actors for the columns. This means that each column is an actor, so you can move it around or animate it like an actor. See the NoteColumnRenderer class for a list of special functions for the column's actor.
+
+
+ Same as SetDidTapNoteCallback, but for hold notes. Uses HoldNoteScore instead of TapNoteScore.
+
+
+ Sets the function that the NoteField will call whenever a tap note is hit.
+ The callback function is passed the column, the TapNoteScore, and whether the explosion will be bright.
+ The callback function can return changed values for the NoteField to use instead of the ones that were passed.
+ Pass nil instead of a function to clear the callback.
+
+
+ Makes the NoteField act as if a press occurred in the column.
+ The callback for set_pressed will not be called.
+
+
+ Sets the function that the NoteField will call whenever a press occurs.
+ The callback function is passed the column for the press.
+ The callback function can return changed values for the NoteField to use instead of the ones that were passed.
+ Pass nil instead of a function to clear the callback.
+
+
+ Sets the function that the NoteField will call whenever a step occurs.
+ The callback function is passed the column and the TapNoteScore for the step.
+ The callback function can return changed values for the NoteField to use instead of the ones that were passed.
+ Pass nil instead of a function to clear the callback.
+
+
+ Makes the NoteField act as if a step occurred in the column with the given score.
+ The callback for Step will not be called.
+
+
+
+
+ Returns true
if the first item in the row goes down.
+
+
+ Returns an index of the choice in the row that player pn
is on.
+
+
+ Returns the OptionRow's layout type.
+
+
+ Returns the name of the OptionRow.
+
+
+ Returns the number of choices in this OptionRow.
+
+
+ Returns the row title string.
+
+
+ Returns the OptionRow's select type.
+
+
+ Returns true
if this row is focused by player pn
.
+
+
+ Returns true
if this row forces one choice on all players.
+
+
+
+
+ Sets the PaneDisplay from the GameState.
+
+
+
+
+ Sets the PercentageDisplay from the specified PlayerState and PlayerStageStats.
+
+
+
+
+ Changes the life value by delta. This will broadcast a LifeChangedMessageCommand, to allow custom life bars to update to the new value. Do not call ChangeLife from within LifeChangedMessageCommand.
+
+
+ Sets the life to value. This will broadcast a LifeChangedMessageCommand, to allow custom life bars to update to the new value. Do not call SetLife from within LifeChangedMessageCommand.
+
+
+ Returns the current TimingData for this player.
+
+
+ Sets Actor with Combo position.
+
+
+ Sets Actor with Judgment position.
+
+
+
+ (PlayerInfo is a part of ScreenGameplay.)
+
+ Returns the of player pn
.
+
+
+ Returns the Steps located at index
in the current steps queue.
+
+
+
+
+ All these functions have an optional last argument: If the last argument is the boolean value true, then instead of returning the previous settings as normal, they will instead return the PlayerOptions object.
+ This allows you to chain them like this:
+ player_options:Twirl(5, 1, true):Roll(5, true):Dizzy(true):Twirl()
+
+ Special note: Functions that take a bool as their arg must have true as the second arg to be used with chaining.
+ "player_options:Backwards(true, true):Beat(5)" will chain, "player_options:Backwards(true):Beat(5)" will not chain.
+
+ Most options fall into one of four types: float, int, bool, or enum.
+ Float type options have this interface:
+ Option(value, approach_speed)
+ If value is a float, sets the TimeSpacing modifier to value.
+ If approach_speed is a float, sets the speed of the transition to approach_speed. Returns the previous values of both.
+ approach_speed is in units of n per second. value will be approached at the rate of approach_speed per second.
+ Note that the value and the approach speed arguments are both independently optional.
+ Example:
+ a,b= options:Boost() -- Sets a to the current value and b to the current approach_speed.
+ a,b= options:Boost(5, .5) -- Stores the previous values in a and b, NOT to 5 and .5. Sets the value to 5 and the approach speed to .5.
+ a,b= options:Boost(5) -- Sets a and b to the previous values, NOT to 5 and .5. Sets the value to 5 and leaves the approach speed at whatever it was.
+
+ Setting the approach speed only matters when modifying the PlayerOptions from ModsLevel_Song.
+ Int type options are similar to float in that they return and take a number, but they do not have an approach speed.
+ Bool type options have an almost identical interface, the difference is that they can not have an approach speed.
+ Enum type options are almost identical to bool type. They take and return an enum value.
+ For brevity, the functions are only given a description if the option requires careful handling or does not follow the float or bool interfaces.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ If the player has a CMod set, returns the value of that CMod and its associated approach speed. Returns nil otherwise.
+ If the optional first argument is passed, sets the CMod to the value and disables any XMod or MMod that is set.
+ If the optional second argument is passed, sets the speed at which the transition occurs.
+
+
+
+
+
+
+
+ If the player is using Distant (zero skew and positive tilt), returns the value of tilt and its approach_speed.
+ Returns nil otherwise.
+ If the optional first argument is passed, sets tilt to value and skew to zero.
+ If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
+
+
+
+
+
+
+ Sets the for the player, if the optional argument is provided. Returns the that was previously set.
+
+
+
+
+ Returns true if step attacks or random attacks are enabled.
+
+
+ Returns true
if the current PlayerOptions makes the current Course/Trail easier.
+
+
+ Returns true
if the current PlayerOptions makes the current Song/Steps easier.
+
+
+ If the player is using Hallway (zero skew and negative tilt), returns the value of tilt and its approach_speed.
+ Returns nil otherwise.
+ If the optional first argument is passed, sets tilt to negative value and skew to zero.
+ Pass in a positive value for the familiar meaning of Hallway.
+ If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
+
+
+
+
+
+ If the player is using Incoming ((positive skew and negative tilt) or (negative skew and positive tilt)), returns the value of skew and its approach_speed.
+ Returns nil otherwise.
+ If the optional first argument is passed, sets tilt to negative value and skew to value.
+ Pass in a positive value for the familiar meaning of Incoming.
+ If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
+
+
+
+
+
+
+ MaxScrollBPM is one of the variables for controlling the speed mod.
+ Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
+ It is the setting for the MMod.
+ MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
+
+
+
+ Sets the min TapNoteScore required for the notes to disappear after being hit.
+
+
+ If the player has a MMod set, returns the value of that MMod and its associated approach speed. Returns nil otherwise.
+ If the optional first argument is passed, sets the MMod to the value and disables any CMod or XMod that is set.
+ If the optional second argument is passed, sets the speed at which the transition occurs.
+ MMods are not tweenable or settable on ScreenGameplay. Use XMods if you need such an effect.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sets the NoteSkin to the named noteskin, unless name is nil or the noteskin does not exist. Returns the name of the previous noteskin and whether the set attempt succeeded.
+ Changing the noteskin during a song is not supported.
+ Example:
+ note_name= options:NoteSkin() -- Sets note_name to the player's current noteskin.
+ prev_note_name, succeeded= options:NoteSkin("cel") -- Sets prev_note_name to the noteskin the player had set, changes the current noteskin to "cel", sets succeeded to true if the "cel" noteskin exists.
+
+
+ If the player is using Overhead (0 tilt, 0 skew), returns true.
+ If true is passed, sets the tilt and skew to 0.
+
+
+
+
+
+
+
+
+
+
+
+
+ ScrollBPM is one of the variables for controlling the speed mod.
+ Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
+ It is the setting for the CMod.
+
+
+ ScrollSpeed is one of the variables for controlling the speed mod.
+ Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
+ It is the setting for the XMod.
+
+
+
+ Skew is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.
+ Skew moves the vanishing point for the note field away from the center of the screen.
+ Skew has no effect in single mode if Center1Player is true.
+ Skew has no effect in double mode.
+
+
+
+
+ If the player is using Space ((positive skew and positive tilt) or (negative skew and negative tilt)), returns the value of skew and its approach_speed.
+ Returns nil otherwise.
+ If the optional first argument is passed, sets tilt to value and skew to value.
+ If the optional second argument is passed, sets the approach_speed for skew and tilt to it.
+
+
+
+
+
+
+
+
+ TimeSpacing is one of the variables for controlling the speed mod.
+ Use CMod, XMod, or MMod to set the speed mod unless you have a good reason not to.
+ It controls whether the speed mod is in X mode or C mode. It should only be set to 0 or 1, and is only a float value to allow tweening between the two states.
+
+
+ Tilt is one of the mods for controlling the perspective. Use Overhead, Distant, Incoming, Space, Distant, or Hallway for controlling the perspective in the old way.
+ Tilt tilts the note field forward and back.
+
+
+
+
+
+
+
+
+ Returns true
if the player is using reverse. (equivalent to GetReverse() == 1.0
)
+
+
+
+
+ If the player has a XMod set, returns the value of that XMod and its associated approach speed. Returns nil otherwise.
+ If the optional first argument is passed, sets the XMod to the value and disables any CMod or MMod that is set.
+ If the optional second argument is passed, sets the speed at which the transition occurs.
+
+
+
+
+
+ Fails the player.
+
+
+ Returns true
if a full combo (TNS_W3 and up) was obtained.
+
+
+ Returns true
if a full combo (tns
and up) was obtained.
+
+
+ Returns the number of Dance Points obtained by the player.
+
+
+ Returns how long the player has been alive.
+
+
+ Returns the best tap note score for a full combo.
+
+
+ Returns the number of calories burned.
+
+
+ Returns a table of all the combos. Each entry in the table is a table containing the StartSecond, SizeSeconds, Count, Rollover, StageCount, and IsZero information for that combo.
+
+
+ Returns the current possible maximum score.
+
+
+ Returns the player's current combo.
+
+
+ Returns the player's current life from 0..1.
+
+
+ Returns the player's current miss combo.
+
+
+ Returns the number of Dance Points possible to be obtained by the player.
+
+
+ Returns the player's current score multiplier.
+
+
+ Returns true
if the player failed.
+
+
+ Returns the player's grade.
+
+
+ Returns the player's HighScore.
+
+
+ Returns the number of judgments for a specified HoldNoteScore.
+
+
+ Returns the player's actual score on the lesson.
+
+
+ Returns the score needed to pass the lesson.
+
+
+ Returns table of samples of the life record from 0 to last_second.
+ 'samples' determines the size of the table. 'samples' defaults to 100
+ if not specified.
+
+
+ Returns the player's life remaining seconds.
+
+
+ Returns the machine high score index for this performance.
+
+
+ Returns the number of controller steps.
+
+
+ Returns the peak combo award for this performance.
+
+
+ Returns the personal high score index for this performance.
+
+
+ Returns a table of played steps.
+
+
+ Gets the percentage of taps that were scored as tns
.
+
+
+ Returns the player's Dance Point percentage.
+
+
+ Returns the number of possible Dance Points.
+
+
+ Returns a table of possible steps.
+
+
+ Returns a RadarValues object representing the player's actual performance.
+
+
+ Returns a RadarValues object representing the total values for the song.
+
+
+ Returns the score.
+
+
+ Returns the number of songs passed.
+
+
+ Returns the number of songs played.
+
+
+ Returns the stage award for this performance.
+
+
+ Returns how long the player survived in seconds.
+
+
+ Returns the number of judgments for a specified TapNoteScore.
+
+
+ Returns the max combo for this performance.
+
+
+ Returns true
if the player was disqualified from ranking.
+
+
+
+
+ Applies the player options of ModsLevel_Preferred to the other ModsLevels.
+
+
+ Returns the current PlayerOptions for this PlayerState.
+
+
+ Returns the HealthState for this PlayerState.
+
+
+ Returns the multiplayer number for this PlayerState.
+
+
+ Returns the PlayerController for this PlayerState.
+
+
+ Returns the player number for this PlayerState.
+
+
+ Returns a PlayerOptions object for the specified ModsLevel.
+
+
+ Returns a string of player options for the specified ModsLevel. (was GetPlayerOptions
before sm-ssc v1.2.3)
+
+
+ Returns a table of strings, containing the player options for the specified ModsLevel.
+
+
+ Returns the SongPosition for this PlayerState.
+
+
+ Returns the current Super Meter level for this PlayerState.
+
+
+ Sets the player options to sPlayerOptions
for the specified ModsLevel.
+
+
+
+
+ Return the value of the preference sPreference
.
+
+
+ Return true if preference sPreference
exists.
+
+
+ Set the value of the preference sPreference
to value
.
+
+
+ Reset preference sPreference
to the default value.
+
+
+ Saves preferences to disk.
+
+
+
+
+ Adds cals to the daily total.
+
+
+ Adds a screenshot entry to the profile. filename must be the full path of the screenshot, as returned by SaveScreenshot.
+
+
+ Calculates the number of calories burned based on the heart rate (in beats per minute), the duration (in seconds), and data in the profile.
+
+
+ Returns the age.
+
+
+ Returns a table of all high score names that have been used on this profile.
+
+
+ Returns the birth year.
+
+
+ Returns the number of calories burned during the current day.
+
+
+ Returns the profile's high scores for the specified ranking category.
+
+
+ Returns the Character being used by this profile.
+
+
+ Returns a composite of your high scores over courses with the specified StepsType and Difficulty.
+
+
+ Returns the percentage of courses that you've completed with the specified StepsType and Difficulty.
+
+
+ Returns the possible score of courses with the specified StepsType and Difficulty.
+
+
+ Returns the profile's display name.
+
+
+ Return the number of calories burned as a string.
+
+
+ Returns the number of calories needed to reach the goal.
+
+
+ Returns the number of seconds needed to reach the goal.
+
+
+ Returns the current goal type.
+
+
+ Returns the GUID of this Profile.
+
+
+ Returns whether this profile ignores the step count based calorie calculation.
+
+
+ Returns whether this profile uses the male formula when CalculateCaloriesFromHeartRate is used.
+
+
+ Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t
)
+
+
+ Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t
)
+ If the profile does not have a HighScoreList for the Song and Steps, returns nil. Use this to avoid increasing the memory footprint of the profile when checking the score lists for every song and steps.
+
+
+ Returns the last played Course for this profile.
+
+
+ Returns the last played Song for this profile.
+
+
+ Returns the last used high score name.
+
+
+ Returns the number of Toasties gotten using the specified profile.
+
+
+ Returns the profile's most popular course.
+
+
+ Returns the profile's most popular song.
+
+
+ Returns the total number of songs played with the profile.
+
+
+ Returns the position the profile should have in its category in the list.
+
+
+ Returns the number of times song s
has been played with the profile.
+
+
+ Returns a composite of your high scores over songs with the specified StepsType and Difficulty.
+
+
+ Returns the percent complete for all songs and courses for the specified StepsType st
.
+
+
+ Returns the percentage of songs that you've completed with the specified StepsType and Difficulty.
+
+
+ Returns the possible score of songs with the specified StepsType and Difficulty.
+
+
+ Return the total number of calories burned.
+
+
+ Returns the number of dance points earned.
+
+
+ Returns the number of Hands stepped on.
+
+
+ Returns the number of successful Holds.
+
+
+ Returns the number of Jumps stepped on.
+
+
+ Returns the number of successful Lifts.
+
+
+ Returns the number of Mines stepped on.
+
+
+ Returns the total number of songs played with the profile.
+
+
+ Returns the number of successful Rolls.
+
+
+ Returns the number of steps with the specified StepsType and Difficulty that you've scored a certain Grade g
on.
+
+
+ Returns the number of Taps and successful Holds.
+
+
+ Returns the number of trails with the specified StepsType and Difficulty that you've scored a certain Grade g
on.
+
+
+ Returns the type of the profile. The type of the profile is only used to determine where the profile shows up in the list of profiles, and that problem is already handled by ProfileManager, so if you're reading this, this function only exists so you can make your theme color this profile's list entry based on the type or something like that.
+
+
+ Returns the user table for this Profile.
+
+
+ Returns the VO2 max for this profile.
+
+
+ Returns how much the player weighs.
+
+
+ Returns true
if the player has passed any steps in the specified Song s
.
+
+
+ Returns true
if the specified code sUnlockEntryID
is unlocked.
+
+
+ Sets the birth year of the profile.
+
+
+ Sets the current for the Profile.
+
+
+ Sets the display name of the profile to name.
+
+
+ Sets the goal to iCals
calories.
+
+
+ Sets the goal to iSecs
seconds.
+
+
+ Sets the current goal type to gt
.
+
+
+ Sets whether this profile ignores the step count based calorie counting.
+
+
+ Sets whether this profile uses the male formula when CalculateCaloriesFromHeartRate is used.
+
+
+ Sets last used high score name.
+
+
+ Sets the VO2 max for the profile. 0 is treated as unset.
+
+
+ Sets how much the player weighs (in pounds) to weightPounds
.
+
+
+
+ Returns the amount of time this profile has spent in gameplay (in seconds).
+
+
+ Returns the number of sessions this profile has had.
+
+
+ Returns the total session length (in seconds) of this profile.
+
+
+
+
+ Returns the Profile for the specified profile ID.
+
+
+ Returns a table of the local profile display names.
+
+
+
+
+ Returns a table of the local profile IDs.
+
+
+
+ Retuns the machine profile.
+
+
+ Retuns the amount of local profiles.
+
+
+ Returns the player name for player pn
.
+
+
+ Returns the profile for player pn
.
+
+
+ Returns the profile directory of the specified ProfileSlot
.
+
+
+ Returns the number of times Song s has been played with the specified ProfileSlot.
+
+
+ Returns the current stats prefix.
+
+
+ Returns true
if player pn
's profile is persistent.
+
+
+ Returns true
if Song s
has never been played before (according to the machine profile).
+
+
+
+
+ Returns true
if the profile from the memory card is new.
+
+
+ Returns true
if pn
's Profile was loaded from a memory card.
+
+
+
+ Returns true
if the last load of player pn
's profile was a LastGood copy of the profile.
+
+
+ Returns true
if the last load of player pn
's profile resulted in a tampered or corrupt profile.
+
+
+ Saves the local profile with the specified ID.
+
+
+ Saves the machine profile.
+
+
+ Saves the profile for player pn
.
+
+
+ Sets the current stats prefix. The stats prefix is prepended to the Stats.xml file when loading or saving a profile. SetStatsPrefix will reload all profiles from the Stats.xml that has the given prefix. In general, score entries are the only thing not preserved when changing the stats prefix. Profile::HandleStatsPrefixChange in Profile.cpp lists the fields that are preserved.
+
+
+
+
+ Returns the value of rc
from .
+
+
+
+
+ You must call create_bezier to create a RageBezier2D to use any of these functions. When you are done with the object, destroy it with its destroy function to avoid a memory leak.
+ A RageBezier2D is two RageQuadratics, one for the x coordinate and one for the y.
+ This class is provided as a tool for designers working with bezier tweens who need a tool that displays the tween curve visually.
+ If you use Actor:tween(time, "TweenType_Bezier", {xa, ya, xb, yb, xc, yc, xd, yd}) to tween an actor, the actor creates a RageBezier2D internally and calls evaluate_y_from_x each frame to set where it is in the tween.
+
+
+ Destroys the RageBezier2D. Do not attempt to use it after it has been destroyed.
+
+
+ Evaluates the bezier curve at the given t and returns the x and y values. This is equivalent to using get_x and get_y to fetch the quadratic parts and calling evaluate on them directly.
+
+
+ Takes the x given and converts it to a t value, then evaluates the y quadratic with the t value and returns the result.
+
+
+ Returns the RageQuadratic used for the x component.
+
+
+ Returns the RageQuadratic used for the y component.
+
+
+ Sets the values used by the two quadratics. This is equivalent to using get_x and get_y to get the quadratics and setting them directly. Note that the components for the x quadratic and the y quadratic are interleaved.
+
+
+
+
+ Return the height of the display.
+
+
+ Return the width of the display.
+
+
+ Return the number of frames per second.
+
+
+ Return the VPF.
+
+
+ Return the cumulative FPS.
+
+
+
+
+ These commands require a RageFile handle. You can create one using
+ .
+
+
+ Returns true
if the current position within the file is the end. (EOF = End of File)
+
+
+ Clears the last error message.
+
+
+ Closes the file and releases it from memory.
+
+
+ Safely deletes the file handle.
+
+
+ Flushes the buffer for the file handle, writing any pending output to disk.
+
+
+ Gets the last error message and returns it.
+
+
+ Gets a line and returns it.
+
+
+ Opens a file at sPath
(relative to the StepMania root directory).
+ iAccessType
can be set to read (1
), write (2
), stream (4
) or flush to disk on close (8
).
+ These can also be combined with addition. For example, to set up read and write, set iAccessType
to 3
(1+2).
+
+
+ Puts a new line in the file.
+
+
+ Returns a string containing the entire contents of the file.
+
+
+ Returns length
bytes from the RageFile's current position.
+
+
+ Seeks to a position in the file and returns the new position.
+
+
+ Returns the current position in the file.
+
+
+ Writes a file with the contents of str
.
+
+
+
+
+ Returns true
if a file exists at sPath
.
+
+
+ Returns a listing of files from sPath
. The last two arguments are optional (and default to false).
+
+
+ Returns a file's size in bytes.
+
+
+ Returns the hash of the file at sPath
.
+
+
+
+
+ Return an array of connected input device descriptions.
+
+
+
+
+ If you use Actor:tween(time, "TweenType_Bezier", {a, b, c, d}) to tween an actor, the actor creates a RageQuadratic internally and calls evaluate each frame to set where it is in the tween.
+
+
+ Evaluates the quadratic at the given t value and returns the result.
+
+
+ Returns the four values that form the quadratic equation. This function returns multiple values, so you must do something like this to get them:
+ a, b, c, d= quadratic:get_bezier()
+
+
+ Equivalent to evaluate(1), but faster.
+
+
+ Equivalent to evaluate(0), but faster.
+
+
+ Returns the slope of the curve at the given t value.
+
+
+ Sets the four values that form the quadratic equation.
+
+
+ Sets the four values that form the quadratic equation, treating the arguments as from a cubic equation instead of as from a bezier curve.
+
+
+
+
+ See for loading a sound.
+
+
+ Returns the length of the sound loaded into this RageSound. Returns -1 if no sound is loaded.
+
+
+ Actually sets the value of sProperty
to fVal
. The supported properties depend on how the associated was loaded.
+
+
+ Attempts (and typically fails) to set the value of sProperty
to fVal
. The supported properties depend on how the associated was loaded.
+
+
+ Sets the pitch to fPitch
. The associated have SupportsRateChanging = true
on load.
+
+
+ Sets the speed (that is, the rate at which the sound plays) to fSpeed
. The associated must have SupportsRateChanging = true
on load.
+
+
+ Sets the volume to fVolume
, which is between 0..1.
+
+
+
+
+ Returns the source width.
+
+
+ Returns the source height.
+
+
+ Returns the texture width.
+
+
+ Returns the texture height.
+
+
+ Returns the image width.
+
+
+ Returns the image height.
+
+
+ Returns the number of frames in this texture.
+
+
+ Returns the path to the texture's file.
+
+
+ Return the texture coordinate rectangle as {left, top, right, bottom}
.
+
+
+ Sets the animation or movie looping to bLoop
.
+
+
+ Sets the animation or movie position to fPos
.
+
+
+ Sets the animation or movie playback rate to fRate
.
+
+
+ Reloads the texture.
+
+
+
+
+ Loads the metrics for this RollingNumbers from sGroupName
.
+
+
+ Sets the target number to f
.
+
+
+
+
+ This adds the lua function "callback" to the list of functions the screen will pass input to. Whenever an input event occurs, callback will be passed a table with the details of the event. callback must return a bool to indicate whether the event was handled. If callback returns true, the event will not be passed any further.
+ This should not be used to provide text input because that would not handle localization or different keyboard layouts.
+ The screen and the callbacks will both be passed input events, so be aware of what input the current screen responds to and consider the effects.
+ Details of the table containing the event data:
+ {
+ DeviceInput= { -- The raw details of the event.
+ device= string, -- The type of device. The first half of the string will be "Device_", the second half will be from InputDeviceNames in RageInputDevice.cpp.
+ button= string, -- The button that was pressed. the first half of the string will be "DeviceButton_", the second half will be from InitNames in RageInputDevice.cpp.
+ level= float, -- A floating point value for analog input.
+ z= float, -- Mousewheel input.
+ down= bool, -- Whether the button is down. This is level with a threshold and debouncing applied.
+ ago= float, -- How long ago this input occurred, in seconds.
+ is_joystick= bool, -- True if the device is a joystick.
+ is_mouse= bool -- True if the device is a mouse.
+ }, -- This ends the list of things inside the DeviceInput part of the table.
+ controller= string, -- The game controller this event was mapped to. "GameController_1" or "GameController_2", or nil if the event wasn't mapped to either controller.
+ button= string, -- The semi-raw button that was pressed. This is what the button was mapped to by the keymap settings, but without the conversions that occur when OnlyDedicatedMenuButtons is true. Will be empty if the button was not mapped.
+ type= string, -- The type of event. "InputEventType_FirstPress", "InputEventType_Repeat", or "InputEventType_Release".
+ GameButton= string, -- The cooked button that was pressed. This is button with mapping that occurs when OnlyDedicatedMenuButtons is true applied. This is nil for unmapped buttons.
+ PlayerNumber= PlayerNumber, -- The player that the controller is mapped to, or nil.
+ MultiPlayer= string, -- Unknown purpose.
+ }
+
+
+ Returns the name of the next Screen.
+
+
+ Returns the name of the previous Screen.
+
+
+ Returns the ScreenType for this Screen.
+
+
+ Locks input for f
seconds.
+
+
+ [02 Other.lua] Gets a metric from the current Screen.
+
+
+ Posts a message with the text sScreenMsg
to the Screen after fDelay
seconds.
+
+
+ This removes the callback from the list.
+
+
+ Sets the NextScreen value to name.
+
+
+ Sets the PrevScreen value to name.
+
+
+ [02 Other.lua] Gets a string from the current Screen in the current language.
+
+
+
+
+ Returns the current .
+
+
+
+
+ Returns the current StageStats.
+
+
+
+
+ This should behave identically to the normal back button behavior. This function is for the pause menu to use when the player forfeits or restarts, so that a score isn't saved.
+
+
+ Returns true
if a single has its NoteField centered.
+
+
+ Returns a dummy PlayerInfo for the specified index.
+
+
+ Returns the current haste rate. HasteRate * MusicRate is the current total rate the music is multiplied by.
+
+
+ Returns the for the specified pn
.
+
+
+ Returns the next in the current .
+
+
+ Returns the PlayerInfo for player pn
.
+
+
+ Returns the current true beats per second for the specified player.
+ This takes into account the current music rate and the current haste effect.
+ If you are displaying the BPM on ScreenGameplay, this is what you should use to have correct behavior when Haste and/or a music rate mod are in effect.
+
+
+ This is part of the system for controlling how haste behaves.
+ Read Docs/Themerdocs/haste.txt.
+
+
+ This is part of the system for controlling how haste behaves.
+ Read Docs/Themerdocs/haste.txt.
+
+
+ This is part of the system for controlling how haste behaves.
+ Read Docs/Themerdocs/haste.txt.
+
+
+ This is part of the system for controlling how haste behaves.
+ Read Docs/Themerdocs/haste.txt.
+
+
+ Sets the next Screen to be loaded.
+
+
+ Returns true
if the game is paused.
+
+
+ Pauses or unpauses the game, depending on the value of bPause
.
+
+
+
+
+ Returns the LifeMeter.
+
+
+
+
+ Adds a screen at the top of the screen stack. (sMessage
is an optional ScreenMessage posted once the new screen is finished.)
+
+
+ Gets the screen at the top of the screen stack.
+
+
+ Returns whether the input for the player has been redirected away from the normal screen input function. Input that has been redirected is only sent to lua input callbacks.
+
+
+ Plays the invalid sound.
+
+
+ Plays the start sound.
+
+
+ Plays the coin sound.
+
+
+ Plays the cancel sound.
+
+
+ Plays the screenshot sound.
+
+
+ Reloads any loaded overlay screens.
+
+
+ Returns true
if screen class s
exists.
+
+
+ Returns true
if screen s
is prepared.
+
+
+ Sets the next screen to s
.
+
+
+ Sets whether the input for the player has been redirected away from the normal screen input function. Input that has been redirected is only sent to lua input callbacks.
+ This can be useful when putting a custom menu on a screen, and you want to disable the built in actors while the menu is open. Then you handle input through an input callback until the player closes the menu.
+
+
+ Broadcasts a system message.
+
+
+
+
+ Returns true
if Player pn
backspaced successfully.
+
+
+ Returns true
if Player pn
was able to add sKey
to their name.
+
+
+ Attempts to finish Player pn
and returns true
+ if successful.
+
+
+ Returns true
if anyone is entering their name.
+
+
+ Returns true
if anyone is still entering their name.
+ (As opposed to those who are Finalized; see )
+
+
+ Returns true
if Player pn
is entering their name.
+
+
+ Returns true
if Player pn
is finished entering their name.
+
+
+ Gets the currently selected letter of Player pn
.
+
+
+
+
+ Returns the number of active players.
+
+
+
+
+ Returns true
if all active players are on the last options row.
+
+
+ Returns true
if the specified player is on an items that ends the screen.
+
+
+ Returns the current row that player pn
is on. (Was previously GetCurrentRow
.)
+
+
+ Returns the number of rows on the screen.
+
+
+ Returns the specified OptionRow.
+
+
+
+
+ Returns true
if we are going to PlayerOptions.
+
+
+
+
+ Continues to the next screen.
+
+
+ Returns true
if there is a profile that can be loaded.
+
+
+
+
+ Continues to the next screen.
+
+
+ Returns true
if there is a profile that can be saved.
+
+
+
+
+ Returns player pn
's current selected item as an integer.
+
+
+
+
+ Returns false if the options list is already open or the UseOptionsList metric is false.
+
+
+ Returns true
if the player is going to the options screen.
+
+
+ Returns the MusicWheel used on this screen.
+
+
+ Opens the OptionsList for Player pn
+
+
+ [02 StageMods.lua] Sets up modifiers for course modes.
+
+
+ [02 StageMods.lua] Sets up modifiers for non-course modes.
+
+
+
+
+ Tells the screen to go to the previous screen.
+
+
+ Attempts to finish the screen and returns true
+ if successful.
+
+
+ Returns the profile index of the specified Player.
+
+
+ Sets the profile index of Player pn
to iProfileIndex
.
+
+
+
+
+ TextEntrySettings is implemented similar to the Attributes in BitmapText. Formatting issues prevent the sample from being properly shown here. Please see docs/Themerdocs/ScreenTextEntry.txt for the TextEntrySettings format.
+
+
+ Sets up a ScreenTextEntry's values.
+
+
+
+
+ Tells the screen to go to the previous screen.
+
+
+ Returns true
if the screen is currently transitioning.
+
+
+ Tells the screen to go to play its Out transition, and then posts the ScreenMessage sScreenMsg
. To go to the next screen, use "SM_GoToNextScreen" as the argument.
+
+
+ Sets whether the screen allows late joining. This only works for screens that are just ScreenWithMenuElements, as most derived screens have their own hard coded function for whether late joining is allowed.
+
+
+
+
+ Returns an array of all the available objects for a .
+
+
+ Returns the path to the song's background image.
+
+
+ Returns the path to the song's banner.
+
+
+ Returns a table with all the data for the song's BGCHANGES line.
+ Each element of the table is one change like this:
+ {start_beat= 1.0, rate= 1.0, transition= "example", effect= "example", file1= "example", file2= "example", color1= "#FFFFFFFF", color2= "#FFFFFFFF"}
+
+
+ Returns the path to the song's CD image.
+
+
+ Gets the path to the CDTitle.
+
+
+ Returns the path to the song's disc image (different from CD, think Pump).
+
+
+ Returns the displayed artist of the song.
+
+
+ Returns a table of 2 floats containing the display BPMs.
+
+
+ Returns the displayed full title of the song, including subtitle.
+
+
+ Returns the displayed main title of the song.
+
+
+ Returns the displayed subtitle of the song.
+
+
+ Returns the first beat of the song.
+
+
+ Returns the first second of the song.
+
+
+ Returns the genre of the song.
+
+
+ Returns the group name that the song is in.
+
+
+ Returns the path to the song's jacket image.
+
+
+ Returns the last beat of the song.
+
+
+ Returns the last second of the song.
+
+
+ Gets the path to the lyrics.
+
+
+ GetDisplayMainTitle checks the ShowNativeLanguage pref and returns the transliterated title is that pref is false.
+ GetMainTitle (this function) does not check that pref. Instead, it directly returns the title, exactly as it is in the #TITLE field in the simfile.
+
+
+ Gets the path to the music file.
+
+
+ Returns a Step object if the StepType and Difficulty exist.
+
+
+ Gets the Song's origin.
+
+
+ Returns the path to the Song's preview music. This handles the #PREVIEW tag internally, so it works with songs that use it and songs that don't.
+
+
+ Returns the path to the Song's preview video, if it exists. (Returns nil
otherwise.)
+
+
+ Gets the length of a song's sample time in seconds.
+
+
+ Gets the starting position of a song sample in seconds.
+
+
+ Returns the song's directory.
+
+
+ Returns the songfile path.
+
+
+ [02 Other.lua] Returns the number of stages this song costs.
+
+
+ Returns a table of Steps that have StepsType st
.
+
+
+ Returns how long the longest stepchart is in seconds.
+
+
+ Returns the song's TimingData.
+
+
+ Returns the transliterated artist of the song.
+
+
+ Returns the transliterated full title of the song, including subtitle.
+
+
+ Returns the transliterated main title of the song.
+
+
+ Returns the transliterated subtitle of the song.
+
+
+ Returns true
if the song has steps for the specified difficulty in st
.
+
+
+ Returns true
if the song has attacks.
+
+
+ Returns true
if the song has a background.
+
+
+ Returns true
if the song has a banner.
+
+
+ Returns true
if the song has BGChanges.
+
+
+ Returns true
if the song has a CD image.
+
+
+ Returns true
if the song has a CDTitle.
+
+
+ Returns true
if the song has a Disc graphic.
+
+
+ Returns true
if the song has edits.
+
+
+ Returns true
if the song has a jacket graphic.
+
+
+ Returns true
if the song has lyrics.
+
+
+ Returns true
if the song has music.
+
+
+ Returns true
if the song has a preview video.
+
+
+ Returns true
if the song has significant BPM changes or stops.
+
+
+ Returns true
if the song has the specified StepsType.
+
+
+ Returns true
if the song's DisplayBPM is constant.
+
+
+ Returns true
if the song's DisplayBPM is random.
+
+
+ Returns true
if the song's DisplayBPM is secret.
+
+
+ Returns true
if the song is considered easy.
+
+
+ Returns true
if the song is enabled.
+
+
+ Returns true
if the song meets the criteria for a "Long Version".
+
+
+ Returns true
if the song meets the criteria for "Marathon" length.
+
+
+ Returns true
if the song and the specified steps have different timing.
+
+
+ Returns true
if the song only has Beginner steps.
+
+
+ Returns the length of the song in seconds.
+
+
+ Returns true
if the song is normally displayed.
+
+
+ Returns true
if the song is shown in Demonstration and Ranking.
+
+
+
+
+ Returns true
if the specified course group exists.
+
+
+ Returns true
if the specified song group exists.
+
+
+ Returns a Course if one matching sCourse
is found.
+
+
+ Returns a Song if one matching sSong
is found.
+
+
+ Returns an array of all the installed courses.
+
+
+ Returns an array of all the installed songs.
+
+
+ Returns the course color of Course c
.
+
+
+ Returns the path to the specified course group's banner.
+
+
+ Returns a table containing all of the course group names.
+
+
+ Returns a table with all of the courses in the specified group.
+
+
+ Returns the extra stage info (Song, Steps) for the specified Style s
. (If bExtra2
is true, it will use the second Extra Stage data instead of the first. Again, Lua.xsd sucks)
+
+
+ Returns the number of courses loaded via Additional folders.
+
+
+ Returns the number of songs loaded via Additional folders.
+
+
+ Returns the number of course groups.
+
+
+ Returns the number of courses.
+
+
+ Returns the number of selectable and unlocked songs.
+
+
+ Returns the number of song groups.
+
+
+ Returns the number of songs.
+
+
+ Returns the number of locked songs, regardless of reason for locking.
+
+
+ Returns the number of unlocked songs.
+
+
+ Returns a table of popular courses for the specified CourseType.
+
+
+ Returns a table of popular songs.
+
+
+ Returns a table of courses as they'd appear in preferred sort.
+
+
+ Returns a table of songs as they'd appear in preferred sort.
+
+
+ Returns a random course.
+
+
+ Returns a random song.
+
+
+ Returns the song color of Song s
.
+
+
+ Returns a Song given a set of Steps st
.
+
+
+ Returns the path to the specified song group's banner.
+
+
+ Returns the song group color of sGroupName
.
+
+
+ Returns a table containing all of the song group names.
+
+
+ Returns the rank (popularity) of Song s
.
+
+
+ Returns a table containing all of the songs in group sGroupName
.
+
+
+ Returns the shortened group name (based on entries in Translations.xml).
+
+
+ Loads preferred courses from {theme}/Other/SongManager sListName.txt
.
+
+
+ Loads preferred songs from {theme}/Other/SongManager sListName.txt
.
+
+
+ Returns the preferred sort section name for the specified Song.
+
+
+ Returns true
if the specified course was loaded from AdditionalCourses.
+
+
+ Returns true
if the specified song was loaded from AdditionalSongs.
+
+
+
+
+ See the description for PlayerOptions. The functions follow the same design.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Limited to the range 0 < rate <= 3 because speeds greater than 3 are likely to crash.
+
+
+ A multiplier for the haste system. Limited to the range -1 to 1.
+
+
+
+
+ Returns the current beats per second.
+
+
+ Returns true
if a Delay is active.
+
+
+ Returns true
if a Freeze is active.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Returns the row where a warp appears.
+
+
+ Returns the warp destination length.
+
+
+
+
+ Returns the length of the animation in seconds.
+
+
+ Gets whether the Sprite should call the decode function for its texture during updates.
+
+
+ Return the number of states this Sprite has.
+
+
+ Returns the Sprite's current state (frame number in a multi-frame sprite).
+
+
+ Returns the Sprite's texture.
+
+
+ [02 Sprite.lua] Returns a Frames
table consisting of iNumFrames
frames lasting for a total of fSeconds
seconds. This function is not a member function and should be used as Frames = Sprite.LinearFrames( 5, 2.6 )
.
+
+
+ If sPath
is nil
, then unload the texture. Otherwise, load the texture at path sPath
.
+
+
+ Load the song background texture at sPath
.
+
+
+ Load the song banner texture at sPath
.
+
+
+ [02 Sprite.lua] Loads the background from the current Song or the first Trail entry.
+
+
+ [02 Sprite.lua] Load the texture for song
's background.
+
+
+ [02 Sprite.lua] Load the texture for song
's banner.
+
+
+ Sets the custom image rectangle. (Works in image pixel space.)
+
+
+ Sets custom offsets for the corners of the Sprite. Coordinates are paired,
+ corner order is upper left, lower left, lower right, upper right.
+
+
+ Turns off the custom pos coords for the sprite.
+
+
+ Sets whether the Sprite should call the decode function for its texture during updates.
+
+
+ Set the to mode
.
+
+
+ Sets the number of seconds into the animation to fSeconds
.
+
+
+ Sets the properties of the states of the sprite. The properties table is identical to the "Frames" table that can be put in the sprite when calling Def.Sprite.
+ Example:
+ {{Frame= 0, Delay= .016, {0, 0}, {.25, .25}},
+ {Frame= 1, Delay= .016, {0, 0}, {.25, .25}},
+ {Frame= 2, Delay= .016, {0, 0}, {.25, .25}},
+ {Frame= 3, Delay= .016, {0, 0}, {.25, .25}},
+ }
+ Frame is optional, defaulting to 0.
+ Delay is optional, defaulting to 0.
+ The two tables are optional upper left and lower right corners of the fraction of the frame to use. The example makes the sprite only use the upper left corner of each frame.
+ Simpler example:
+ {{Frame= 0, Delay= .016}, {Frame= 1, Delay= .016}, {Frame= 2, Delay= .016}, {Frame= 3, Delay= .016}}
+ This example makes the sprite use the whole of each frame.
+
+
+ Set the texture to texture
.
+
+
+
+
+
+ Allows the themer to set a custom texture rectangle that effects the way the texture is drawn.
+
+
+ Returns true if the sprite is using the effect clock for texcoordvelocity.
+
+
+ [02 Sprite.lua] Call RageTexture:loop
( bLoop )
on the texture.
+
+
+ [02 Sprite.lua] Call RageTexture:position
( fPos )
on the texture.
+
+
+ [02 Sprite.lua] Call RageTexture:rate
( fRate )
on the texture.
+
+
+ Scale the Sprite to width fWidth
and height fHeight
clipping if the dimensions do not match.
+
+
+ Set the Sprite's state to iNewState
.
+
+
+ If use
is true, then the sprite will use the effect clock for texcoordvelocity.
+
+
+
+
+
+ Set the texture coordinate velocity which controls how the Sprite changes as it animates. A velocity of 1 makes the texture scroll all the way once per second.
+
+
+
+ Crops the Sprite to fWidth
xfHeight
.
+
+
+ [01 alias.lua] Alias for CropTo.
+
+
+ Sets all the state delays to fRate
. Useful for Sprites that need to change by BPM (e.g. Tran from DDR 5th Mix, the cube from DS EuroMix 2).
+
+
+
+
+ Returns true
if everyone failed.
+
+
+ Returns the EarnedExtraStage value.
+
+
+ Returns the number of seconds played.
+
+
+ Returns the PlayerStageStats of multiplayer mp
.
+
+
+
+ Returns the PlayerStageStats of player pn
.
+
+
+
+ Returns the Stage value.
+
+
+ Returns the stage index.
+
+
+ Returns true
if at least one person passed.
+
+
+ Returns true
if player pn
has a high score.
+
+
+
+
+ Returns the accumulated played StageStats.
+
+
+ Returns the best final grade.
+
+
+ Returns the best grade.
+
+
+ Returns the current StageStats.
+
+
+ Returns player pn
's final grade.
+
+
+ Get the StageStats from iAgo
rounds ago.
+
+
+ Returns the number of stages played.
+
+
+ Returns the worst grade.
+
+
+ Resets the stats.
+
+
+
+
+ Returns the author that made that particular Steps pattern.
+
+
+ Returns the Steps chart name.
+
+
+ Returns the Chart Style for this Steps.
+
+
+ Returns the Steps description.
+
+
+ Returns the Steps difficulty.
+
+
+ Returns a table with the minimum and maximum values from the DisplayBPM.
+
+
+ Returns the DisplayBPM type.
+
+
+ Returns the Steps filename from the Cache.
+
+
+ Returns a hash of the Steps.
+
+
+ Returns the numerical difficulty of the Steps.
+
+
+ Returns true
if the Steps has any attacks.
+
+
+ Returns true
if the Steps pattern has significant timing changes.
+
+
+ Returns the complete list of RadarValues for player pn
. Use to grab a specific value.
+
+
+ Returns the Steps type.
+
+
+ Returns the TimingData for the Steps.
+
+
+ Returns true
if the Steps are an edit.
+
+
+ Returns true
if the Steps are a player edit (loaded from a profile).
+
+
+ Returns true
if the steps were automatically generated.
+
+
+ Returns true
if the DisplayBPM is constant.
+
+
+ Returns true
if the DisplayBPM is random.
+
+
+ Returns true
if the DisplayBPM is secret.
+
+
+ Returns the predicted meter for this Step.
+
+
+ Returns true
if the Steps use different TimingData
from the Song.
+
+
+
+
+ Loads the StepsDisplay commands from the Metrics in group sMetricsGroup
.
+
+
+ Sets the StepsDisplay from the GameState using Player pn
.
+
+
+ Sets the StepsDisplay based on Steps pSteps
.
+
+
+ Sets the StepsDisplay based on the passed in StepsType, iMeter
, and Difficulty.
+
+
+ Sets the StepsDisplay based on Trail pTrail
.
+
+
+
+
+ Returns the number of total tracks per player this Style contains (e.g. 4 for dance-versus, but 8 for dance-double).
+
+
+ Returns the name of the Style.
+
+
+ Returns the StepsType for this Style.
+
+
+ Returns the StyleType for this Style.
+
+
+ Returns a table containing the Track, XOffset, and Name of the column.
+
+
+ Returns the draw order of the column.
+
+
+ Returns the width of the notefield for the given player with this style.
+
+
+ Returns true
if this style locks the difficulty for both players.
+
+
+ Deprecated. Always returns false.
+
+
+
+
+ Returns the of the Tap Note.
+
+
+ Returns the of the Tap Note.
+
+
+ Returns the of the Tap Note.
+
+
+ Returns the of the Tap Note.
+
+
+ Returns the of the Tap Note. Relevant for routine steps.
+
+
+ Returns the Attack Modifiers of the Tap Note.
+
+
+ Returns the Attack Duration of the Tap Note in seconds.
+
+
+ Returns the Keysound Index of the Tap Note.
+
+
+ Returns the Hold Duration of the Tap Note in beats.
+
+
+ Returns the of the Tap Note.
+
+
+
+
+ Returns the of the Tap Note.
+
+
+ Returns the TapNotOffset of the Tap Note.
+
+
+ Returns true if the Tap Note was judged with a result that would stop it from drawing.
+
+
+
+
+ Returns the of the Hold Note.
+
+
+ Returns the life of the Hold Note.
+
+
+ Returns the amount of time the hold has overlapped the target.
+
+
+ Returns the last beat the Hold Note was held.
+
+
+ Returns the number of checkpoints hit.
+
+
+ Returns the number of checkpoints missed.
+
+
+ Returns true if the note was initiated and is being held.
+
+
+ Returns true if the note was initiated.
+
+
+
+
+ Loads the TextBanner from the specified metrics group.
+
+
+ Loads the TextBanner's child elements from a .
+
+
+ Loads the TextBanner's child elements from strings.
+
+
+
+
+ Returns true
if the specified language exists in the current theme.
+
+
+ Returns true
if the specified theme exists.
+
+
+ [02 Utilities.lua] Returns the absolute path of a file in the theme.
+
+
+ Returns the current language.
+
+
+ Returns the theme's current directory.
+
+
+ Returns the name of the current theme.
+
+
+ Returns the value of Element
in Class
from metrics.ini.
+
+
+ Returns the names of all elements in Class
from metrics.ini.
+
+
+ Returns the number of selectable themes.
+
+
+ Returns the path of ClassName Element
in the BGAnimations folder.
+
+
+ Returns the path of an element in the Fonts folder.
+
+
+ Returns the path of an element in the Graphics folder.
+
+
+ returns three strings: BGAnimation ResolvedPath, MatchingMetricsGroup, MatchingElement. Used in LoadFallbackB in themes/_fallback/02 Other.lua. (Lua.xsd sucks)
+
+
+ Returns the path of an element in the Other folder.
+
+
+ Returns the path of an element in the Sounds folder.
+
+
+ Returns a table of selectable theme directories.
+
+
+ Returns the value of Element
in Class
for the currently loaded language.
+
+
+ Returns the names of all elements in Class
for the currently loaded language.
+
+
+ Returns the author of the current theme or "[unknown author]".
+
+
+ Returns the display name of the current theme.
+
+
+ Returns true
if the theme has the specified metric.
+
+
+ Returns true
if the theme has the specified string.
+
+
+ Returns true
if the specified theme is selectable.
+
+
+ Reloads the current theme's metrics.
+
+
+
+
+
+ Changes the current theme.
+ After the theme changes, the screen specified by the Common::AfterThemeChangeScreen metric will be loaded.
+ The Common::InitialScreen metric will be used if Common::AfterThemeChangeScreen is blank or invalid.
+
+
+
+
+ GetBPMsAndTimes, GetStops, GetDelays, GetLabels, GetWarps, GetCombos, GetTimeSignatures, GetTickcounts, GetFakes, GetScrolls, and GetSpeeds all have two different modes.
+ If false (or nothing) is the argument to these functions, they return tables of strings. The strings are numbers separated by '='.
+ If the argument is true, they return tables of tables, and the inner tables contain numbers as described for each function.
+ The first form is kept around and is the default for compatibility with older themes. The advantage of the second form is that you no longer need to have a bit of code in your theme to transform the string into a table of numbers before you can use it.
+ Example:
+ local bpmsand= timing_data:GetBPMsAndTimes()
+ for i, s in ipairs(bpmsand) do
+ local sand= split("=", s)
+ bpmsand[i]= {tonumber(sand[1]), tonumber(sand[2])}
+ end
+ -- do something that looks at all the bpms and times.
+ Becomes:
+ local bpmsand= timing_data:GetBPMsAndTimes(true)
+ -- do something that looks at all the bpms and times.
+
+
+ Returns the minimum and maximum BPM of the song in a table (in that order).
+
+
+ Returns the beat from fElapsedTime
.
+
+
+ Returns the BPM at fBeat
.
+
+
+ Returns a table of the BPMs as floats.
+
+
+ Returns a table of the BPMs and the times they happen as tables. The first value is the beat. The second value is the bpm.
+
+
+ Returns the elapsed time from fBeat
.
+
+
+ Returns a table of the Stops and the times they happen as tables. The first value is the beat. The second value is the length.
+
+
+ Returns a table of the Delays and the times they happen as tables. The first value is the beat. The second value is the length.
+
+
+ Returns a table of the Labels and the times they happen as tables. The first value is the beat. The second value is the label.
+
+
+ Returns a table of the Warps and the times they happen as tables. The first value is the beat. The second value is the number of beats to warp over.
+
+
+ Returns a table of the Combos and the times they happen as tables. The first value is the beat. The second value is the combo. The third value is the miss combo.
+
+
+ Returns a table of the Time Signatures and the times they happen as tables. The first value is the beat. The second value is the numerator. The third value is the denominator.
+
+
+ Returns a table of the Tickcounts and the times they happen as tables. The first value is the beat. The second value is the number of ticks per beat.
+
+
+ Returns a table of the Fakes and the times they happen as tables. The first value is the beat. The second value is the number of beats to not judge.
+
+
+ Returns a table of the Scrolls and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio.
+
+
+ Returns a table of the Speeds and the times they happen as tables. The first value is the beat. The second value is the scroll rate ratio. The third value is the length of time to fully activate. The fourth value is the unit of activation (0 for beats, 1 for seconds).
+
+
+ Returns true
if the TimingData contains BPM changes.
+
+
+ Returns true
if the TimingData contains delays.
+
+
+ Returns true
if the TimingData contains any BPM changes with a negative BPM.
+
+
+ Returns true
if the TimingData contains stops.
+
+
+ Returns true
if the TimingData contains warps.
+
+
+ returns true
if the TimingData contains fake segments.
+
+
+ Returns true
if the TimingData contains speed scrolling changes.
+
+
+ Returns true
if the TimingData contains general scrolling changes.
+
+
+
+
+ Returns true
if song s
is in the Trail.
+
+
+ Returns an array with all the artists in the Trail.
+
+
+ Returns the Trail's difficulty.
+
+
+ Returns the length of this Trail in seconds.
+
+
+ Returns a table of TrailEntry items.
+
+
+ Returns the Trail's difficulty rating.
+
+
+ Returns the Trail's RadarValues.
+
+
+ Returns the Trail's StepsType.
+
+
+ Returns the Trail's total meter
+
+
+ Returns the TrailEntry at index iEntry
.
+
+
+ Returns true
if any of the Trail entries are secret.
+
+
+
+
+ Returns a string of modifiers used in this TrailEntry.
+
+
+ Returns the Song used in this TrailEntry.
+
+
+ Returns the Steps used in this TrailEntry.
+
+
+ (why'd I think this was a good idea when we have ?)
+
+
+
+
+ Sets the UnlockEntry's ID to m_sEntryID
.
+
+
+ Sets the UnlockEntry's course to sCourseName
.
+ Example: course,"Driven"
+
+
+ Returns the code for this unlock.
+
+
+ Returns the Course for this unlock.
+
+
+ Returns the unlock description.
+
+
+ Returns the UnlockRequirement.
+
+
+ Returns true
if the UnlockEntry requires you to pass Hard steps.
+
+
+ Returns true
if the UnlockEntry requires you to pass Challenge steps.
+
+
+ Returns the Song related to the UnlockEntry.
+
+
+ Get all of the steps locked based on StepsType.
+
+
+ Get all of the steps locked based on difficulty.
+
+
+ Returns the UnlockRewardType for this entry.
+
+
+ Returns true
if the UnlockEntry is locked.
+
+
+ Sets the UnlockEntry's modifier to sModifier
.
+
+
+ Sets the requirement for this unlock to m_fRequirement
.
+
+
+ Makes the UnlockEntry require passing Hard steps.
+
+
+ Makes the UnlockEntry require passing Challenge steps.
+
+
+ Makes the UnlockEntry hide in Roulette.
+
+
+ Sets the UnlockEntry's song to sSongName
. sSongName
also requires the group.
+ Example: song,"In The Groove/Pandemonium"
+
+
+ Sets the UnlockEntry to unlock a specified song's steps.
+ Example: steps,"In The Groove/Pandemonium","expert"
+
+
+ Sets the UnlockEntry to unlock a specified song's stepstype.
+
+
+
+
+ Returns true
if there are any unlocks to celebrate.
+
+
+ Returns the associated EntryID.
+
+
+ Returns the number of unlocked items.
+
+
+ Returns the number of all unlock items, regardless of status.
+
+
+ Returns the number of points for the machine profile based on the specified UnlockRequirement.
+
+
+ Returns the number of points for the specified profile based on the specified UnlockRequirement.
+
+
+ Returns the number of points until the next unlock.
+
+
+ Returns a table of songs unlocked by UnlockEntry sEntryID
.
+
+
+ Returns a table of steps unlocked by UnlockEntry sEntryID
.
+
+
+ Returns the UnlockEntry at iIndex
.
+
+
+ Returns the UnlockEntry index to celebrate.
+
+
+ Sets the preferred Song/Course to the specified sUnlockEntryID
+
+
+ Unlocks an entry by ID.
+
+
+ Unlocks an entry by index.
+
+
+ Determines if a song is locked by any means. The number returned determines
+ how the song is locked.
+
+
+
+
+ Returns the wheel's current index.
+
+
+ Returns the total number of items in the wheel.
+
+
+ Returns the WheelItemDataType of the selected item.
+
+
+ Returns the WheelItem at index iIndex
.
+
+
+ Returns true
if the wheel is locked.
+
+
+ Returns true
if the wheel is settled/stopped moving.
+
+
+ Moves the wheel by n
.
+
+
+ Attempts to set the open section to sSection
.
+
+
+
+
+ Returns the color of this wheel item.
+
+
+ Returns the text of this wheel item.
+
+
+ Returns the type of this wheel item.
+
+
+ Returns whether the wheel item has been loaded yet. If this function returns false, calling any other WheelItemBase function will result in an error.
+ A specific case where this is known to happen is commands that trigger on CurrentSongChanged because the music wheel clears the current song before it finishes loading if the current song is longer than the number of stages remaining.
+
+
+
+
+ Sets the WorkoutGraph from the current Workout.
+
+
+ Sets the WorkoutGraph from GameState and song index iSongIndex
.
+
+
+
+
+
+
+
+ Blending modes. See .
+
+
+
+
+ Horizontal alignment. See .
+
+
+
+
+ Vertical alignment. See .
+
+
+
+
diff --git a/Docs/legacy/Luadoc/a.lua b/Docs/legacy/Luadoc/a.lua
new file mode 100644
index 0000000000..19707af4dc
--- /dev/null
+++ b/Docs/legacy/Luadoc/a.lua
@@ -0,0 +1,22 @@
+require "lxp"
+
+local count = 0
+callbacks = {
+ StartElement = function (parser, name)
+ io.write("+ ", string.rep(" ", count), name, "\n")
+ count = count + 1
+ end,
+ EndElement = function (parser, name)
+ count = count - 1
+ io.write("- ", string.rep(" ", count), name, "\n")
+ end
+}
+
+p = lxp.new(callbacks)
+
+for l in io.lines() do -- iterate lines
+ p:parse(l) -- parses the line
+ p:parse("\n") -- parses the end of line
+end
+p:parse() -- finishes the document
+p:close() -- closes the parser
\ No newline at end of file
diff --git a/Docs/Luadoc/bgline.png b/Docs/legacy/Luadoc/bgline.png
similarity index 100%
rename from Docs/Luadoc/bgline.png
rename to Docs/legacy/Luadoc/bgline.png
diff --git a/Docs/Luadoc/closed.gif b/Docs/legacy/Luadoc/closed.gif
similarity index 100%
rename from Docs/Luadoc/closed.gif
rename to Docs/legacy/Luadoc/closed.gif
diff --git a/Docs/Luadoc/favicon.ico b/Docs/legacy/Luadoc/favicon.ico
similarity index 100%
rename from Docs/Luadoc/favicon.ico
rename to Docs/legacy/Luadoc/favicon.ico
diff --git a/Docs/Luadoc/open.gif b/Docs/legacy/Luadoc/open.gif
similarity index 100%
rename from Docs/Luadoc/open.gif
rename to Docs/legacy/Luadoc/open.gif
diff --git a/Docs/Mapping_keys_for_edit_mode.txt b/Docs/legacy/Mapping_keys_for_edit_mode.txt
similarity index 100%
rename from Docs/Mapping_keys_for_edit_mode.txt
rename to Docs/legacy/Mapping_keys_for_edit_mode.txt
diff --git a/Docs/README-GUIDELINES b/Docs/legacy/README-GUIDELINES
similarity index 97%
rename from Docs/README-GUIDELINES
rename to Docs/legacy/README-GUIDELINES
index 2dc30fba93..7707681340 100644
--- a/Docs/README-GUIDELINES
+++ b/Docs/legacy/README-GUIDELINES
@@ -1,30 +1,30 @@
-Bits of possibly less-than-obvious advice:
-
-archutils/ contains arch-specific code. This should contain code
-shared by more than one arch/ driver.
-
-arch/ contains drivers for specific features that can be better
-implemented nonportably. Most drivers (all except sound) contain
-default, portable implementations, so StepMania should work mostly
-out-of-the-box on platforms that are supported by the supporting
-libraries (particularly SDL); only a sound driver needs to be
-written.
-
-
-Avoid accessing other singleton classes from singleton destructors. That
-introduces dependencies on the order of destruction, and can cause problems
-if one of the singletons throws an exception.
-
-
-This kills VC:
-
-template static void YY( T opt ) { }
-enum { A } a;
-enum { A1 } b;
-void XX() { YY(a); YY(b); }
-
-foo.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT '?YY@@YAXW4__unnamed@@@Z'
-
-It mangles the template incorrectly. Solution: don't use anonymous
-enums as template parameters; give them a name.
-
+Bits of possibly less-than-obvious advice:
+
+archutils/ contains arch-specific code. This should contain code
+shared by more than one arch/ driver.
+
+arch/ contains drivers for specific features that can be better
+implemented nonportably. Most drivers (all except sound) contain
+default, portable implementations, so StepMania should work mostly
+out-of-the-box on platforms that are supported by the supporting
+libraries (particularly SDL); only a sound driver needs to be
+written.
+
+
+Avoid accessing other singleton classes from singleton destructors. That
+introduces dependencies on the order of destruction, and can cause problems
+if one of the singletons throws an exception.
+
+
+This kills VC:
+
+template static void YY( T opt ) { }
+enum { A } a;
+enum { A1 } b;
+void XX() { YY(a); YY(b); }
+
+foo.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT '?YY@@YAXW4__unnamed@@@Z'
+
+It mangles the template incorrectly. Solution: don't use anonymous
+enums as template parameters; give them a name.
+
diff --git a/Docs/SimfileFormats/BMS/BM98Data_format_specification.html b/Docs/legacy/SimfileFormats/BMS/BM98Data_format_specification.html
similarity index 100%
rename from Docs/SimfileFormats/BMS/BM98Data_format_specification.html
rename to Docs/legacy/SimfileFormats/BMS/BM98Data_format_specification.html
diff --git a/Docs/SimfileFormats/BMS/BM98FinalSecret.html b/Docs/legacy/SimfileFormats/BMS/BM98FinalSecret.html
similarity index 100%
rename from Docs/SimfileFormats/BMS/BM98FinalSecret.html
rename to Docs/legacy/SimfileFormats/BMS/BM98FinalSecret.html
diff --git a/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf b/Docs/legacy/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf
similarity index 100%
rename from Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf
rename to Docs/legacy/SimfileFormats/BMS/BMS_Reading_Tutorial.rtf
diff --git a/Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.txt b/Docs/legacy/SimfileFormats/BMS/BMS_Reading_Tutorial.txt
similarity index 100%
rename from Docs/SimfileFormats/BMS/BMS_Reading_Tutorial.txt
rename to Docs/legacy/SimfileFormats/BMS/BMS_Reading_Tutorial.txt
diff --git a/Docs/SimfileFormats/BMS/_src.txt b/Docs/legacy/SimfileFormats/BMS/_src.txt
similarity index 100%
rename from Docs/SimfileFormats/BMS/_src.txt
rename to Docs/legacy/SimfileFormats/BMS/_src.txt
diff --git a/Docs/SimfileFormats/BMS/tmp.txt b/Docs/legacy/SimfileFormats/BMS/tmp.txt
similarity index 100%
rename from Docs/SimfileFormats/BMS/tmp.txt
rename to Docs/legacy/SimfileFormats/BMS/tmp.txt
diff --git a/Docs/SimfileFormats/DWI/DWI.txt b/Docs/legacy/SimfileFormats/DWI/DWI.txt
similarity index 100%
rename from Docs/SimfileFormats/DWI/DWI.txt
rename to Docs/legacy/SimfileFormats/DWI/DWI.txt
diff --git a/Docs/SimfileFormats/DWI/readme.html b/Docs/legacy/SimfileFormats/DWI/readme.html
similarity index 98%
rename from Docs/SimfileFormats/DWI/readme.html
rename to Docs/legacy/SimfileFormats/DWI/readme.html
index cd66e320a0..4e8ba82485 100644
--- a/Docs/SimfileFormats/DWI/readme.html
+++ b/Docs/legacy/SimfileFormats/DWI/readme.html
@@ -1,1224 +1,1224 @@
-DANCE WITH INTENSITY v2.50.00
-© SimWolf, 2003
-
-
- DISCLAIMER AND TERMS OF USE
- WHAT'S NEW?
- USING AND CONFIGURING DWI
- Basic Operation
- Song Sorting
- Selecting Song Modifiers
- Special keys
- Controller Configuration
- Gameplay Settings
- Sound Configuration
- Changing the Display from Windowed to Full-screen
- Sound effects
- Command-line options
- Testing a song
- Setting Skins
- Setting Announcer and Sound Effects
- Folder- and Genre- Specific Banners
- AVI Movie Support
- Sonique Visualizations (SVP) Support
- User Profiles
-
- DWI FILE FORMAT
- NONSTOP MODE AND CRS FILE FORMAT
- LRC (LYRICS) FILE FORMAT
- LIMITATIONS
- VERSION HISTORY
- FUTURE DEVELOPMENT AND THANKS
-
-
-1. DISCLAIMER AND TERMS OF USE
-
-This program is provided for free, as-is. Although it has been tested on multiple systems for compatability and reliability, you run this program at your own risk. I cannot be held responsible if the program causes file loss or other problems.
-
-THIS PROGRAM IS *NOT* FOR SALE!!! IT SHOULD NEVER BE BUNDLED WITH ANY OTHER FILES (MUSIC OR STEP FILES) ON ANY MEDIA, INCLUDING (BUT NOT LIMITED TO) CD's, DVD's, DISKS OR OTHER MEDIA.
-
-DWI is Donation-Ware . Although you are not required to donate, it would be greatly appreciated if you enjoy the program that you contribute something towards the developers.
-
-This program simulates a popular arcade and home video game. It was written to allow myself the ability to play songs from the games without having to switch CDs in my Playstation or Dreamcast, and also affords the ability to add new songs not currently available. It also allows for playing older songs with new play modes, such as downward-scrolling arrows. This program is being released to the public in the hopes that others would find it useful in the same manner.
-
-As such, this program REQUIRES responsibility on the part of the end-user (ie. YOU) to use the program LEGALLY. You should *ONLY* play songs where you:
-
-
-a) Own the game from which that music comes from.
-or b) Own the soundtrack CD from which the music comes from.
-or c) Legally own rights to the music being used (ie. other CDs, etc.)
-
-
-
-I own all the available soundtracks and videogames for the music I own, and respectfully ask that you support the games and purchase them. Thank you.
-
- 2. WHAT'S NEW?
-
-
-v2.50.00 - August 14, 2003.
- - NEW: Addition of WAVE, BRAKE, and 0.25x modifiers.
- - BUGFIX: Stage numbers and various other numbers are coloured again.
- - BUGFIX: Bonus stages now default to Heavy/Maniac again.
- - OTHER: Various other bugs I can't remember that have been fixed.
-
-
-
-
-3. USING AND CONFIGURING DWI
-
-BASIC OPERATION
-
-When you first run DWI, you will receive a warning screen about responsible use of the program. This warning screen will appear *EVERY* time the program detects new songs.
-
-DWI uses step-files with the extension ".DWI". These files go in their own folder along with their associated background and banner images. Optionally the music file can go in the same folder also.
-
-DWI supports multiple collections of songs, so you can organise your songs as you see fit. To do this, just create different sub-directories in the "Songs" folder.
-
-eg. For a song with a step-file of "abc.dwi", put into a collection called "My Songs", your directory structure should look like this:
- <INSTALL directory>
- + Songs
- + My Songs
- + abc
- + abc-banner.png (any name, the program will detect that it's a banner)
- + abc-bg.png (any name, the program will detect that it's a background)
- + abc.dwi (any name)
- + (abc.mp3/wav) (optional - otherwise FILE: tag is used).
- + (abc.lrc) (optional - should have same base as DWI file).
-
-